1. 程式人生 > >C與資料結構——概述(一)

C與資料結構——概述(一)

    引言:  未進職場,真正接觸產品開發之前,基礎還是才是最重要的。大學的好處就是隨心所欲的學。怎麼理解就怎麼理解,不違規,不犯法。呵呵,從今天開始的一段時間,我開始將c語言和資料結構的理解寫寫,算大學的最後珍惜了。一千個讀者就有一千個哈姆雷特。錯與對無關緊要。也許今日膚淺,自己他日有新想法會回來修改完善。

    程式語言這東西,其實我就是喜歡看成資料區,一塊塊的,進行相關操作。

早晨起床,大家都去上課。我賴床,隨手拿起床頭的資料結構和演算法分析來看。以前的老師,我一點都不喜歡,上課照本宣科,沒給我們模型過,還雙語教學。也就是課本是英語,老師一句英語都不講。當時學微控制器,沒怎麼用心學,考試60分,迴圈連結串列竟然考大題,沒看,失策。很久沒摸這本書,躺在床上將列表看完,才起床。
    馬克思主義告訴我們,事物之間是是相互聯絡的。好吧,我用記憶體空間結構和C語言來理解這些東西,還有編譯器。
    掌握語言,至少要理解記憶體空間結構和編譯器怎麼工作,才算瞭解。自己的C不敢說和很好,只能說基礎還行,現在簡歷上說精通的太多了。現在總結一下自己看資料結構,看C語言程式碼的一些理解。掌握東西,別人的一大堆概念,有時候對自己是水過鴨背一樣,所以用自己的想法來理解才是王道。

  數值,地值,資料區,基地址+偏移地址,資料型別和資料結構,資料的定義、初始化,引用。
  1、數值,地值--這兩個只是我的概念而已。一般C的書上都寫資料,地址,指標,陣列名什麼的咚咚,這是人家喜歡的叫法,而我,想想cpu處理東西是指令和資料,計算機裡什麼都是二進位制,0和1,都是資料,程式碼一編譯,就都是目的碼了。存到實體記憶體中,不就都是資料了嗎,但是,這些東西,要區分,有些是需要處理的真正資料(數值),有些則是資料的門牌(地值),比如剛才說的變數名等。
  2、資料區--儲存的根據資料型別,都是一塊一塊的,也就是連續儲存,可以是大單元,可以是小單元。而剛好,指令儲存和改寫資料都需要按塊找到位置(資料塊的基地址),要麼處理整塊大單元,或者其中的小單元,或者單個數據型別,比如表是大單元,節點是大單元中的小單元,何有各個域是對應的資料型別,數值和地值。
  3

、基地址+偏移地值——這個就是找資料塊的方法。儲存空間是實體記憶體大小,一般說多少KB,MB,GB等,而這些空間是對映到對應的地址空間的,也就是編個號,讓CPU認識,比如從0—10,大小是11,編址是從0~10,(計算機裡基本上都是從0編號)。記憶體的物理連線就是掛到系統總線上,用譯碼器譯指令,這樣CPU就可以找到資料進行資料處理了。基地址+偏移地址就是一個空間連續儲存的資料塊。基地址就是大單元地址,小單元就是小單元重新編號,挨家挨戶就可以找到了。比如X8086裡邊,資料塊段地址是0x2000,偏移地址是0x03,那麼基地址+偏移地址,就可以找到0x20003的單元數值了。注意,X8086段地址儲存器是16位的,地址線是20根,所以會有地址值處理。結構體中,P->next,是可以這樣解釋的,比如資料結構表中,P指標指向節點node,那麼P對應的地值是node這個連續儲存的結構,而P->next則是P基地址+next偏移地址,就找到了next這個域,資料是地值,放到地址暫存器進行處理。
    4
、資料型別——沒什麼好說的,就是基本的資料單元形式,記憶體佔多少位元組。其他不是說很多。
    5、資料結構——就是一種基本的資料單元以上的組成形式。記憶體空間分佈。
    6、資料定義、初始化、引用——前面我說過,計算機處理的都是資料,那麼程式碼中見到定義,就是給地值,初始化是給資料區填內容,可以是數值和地值。引用則是使用資料,取到暫存器去處理。比如說,譚老的書:一維陣列的定義方式為 型別說明符 陣列名[常量表達式]。然後下面就是形式明,其實,然後這樣不行,那樣不行,好像沒說到實質,以前我就認為,管他呢,都是編譯器乾的活。
    比如變數定義,陣列定義,指標定義,結構體定義,共用體定義,函式定義,等等,在我看來,都是給地值,要不是大單元,要麼是小單元。初始化——就是給地值對應的資料區填內容,變數是數值,指標。結構體資料塊。引用——資料地值和數值這兩個元素有了,那就可以處理資料了,這是演算法中取出來,在暫存器操作。改寫後存進去或者釋放掉。
    先下解釋說明這些,這個是我閱讀程式碼構造模型的核心咚咚。或許自己語文不太好吧,對一般教程上的東西,總是感覺名詞概念太多,太複雜,還是自己理解,簡單化。畢竟知識是自己腦子裡的東西。
    今天就寫這些,下次分析一些程式碼,比如表,棧,佇列,樹,和一些排序演算法。都很基礎。