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、數據定義、初始化、引用——前面我說過,計算機處理的都是數據,那麼代碼中見到定義,就是給地值,初始化是給數據區填內容,可以是數值和地值。引用則是使用數據,取到寄存器去處理。比如說,譚老的書:一維數組的定義方式爲 類型說明符 數組名[常量表達式]。然後下面就是形式明,其實,然後這樣不行,那樣不行,好像沒說到實質,以前我就認爲,管他呢,都是編譯器乾的活。
    比如變量定義,數組定義,指針定義,結構體定義,共用體定義,函數定義,等等,在我看來,都是給地值,要不是大單元,要麼是小單元。初始化——就是給地值對應的數據區填內容,變量是數值,指針。結構體數據塊。引用——數據地值和數值這兩個元素有了,那就可以處理數據了,這是算法中取出來,在寄存器操作。改寫後存進去或者釋放掉。
    先下解釋說明這些,這個是我閱讀代碼構造模型的核心咚咚。或許自己語文不太好吧,對一般教程上的東西,總是感覺名詞概念太多,太複雜,還是自己理解,簡單化。畢竟知識是自己腦子裏的東西。
    今天就寫這些,下次分析一些代碼,比如表,棧,隊列,樹,和一些排序算法。都很基礎。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章