《C與指針》讀書筆記十
與很多介紹C語言教材不同之處,在《C與指針》的第十二章介紹了一些關于《數據結構》的內容----鏈表。并且介紹了鏈表的插入、刪除、初始化等操作。到這里應該明白了一門計算機語言的偉大之處不在于語言的本身。我當年在學校學習完Pascal覺得語言好像沒有什么太大用處。現在想來不是語言沒有用,而是我并沒有使用語言來解決實際中問題。所以名牌大學與普通大學不同之處,不是授予學生的基本知識不同,而是啟蒙方法不同。
本文引用地址:http://www.104case.com/article/201608/295973.htm鏈表是由節點組成的,每個節點組成,節點必須包括兩大部分,一是節點的內容,另外是指向下一節點的指針。也就下一節點的地址。特殊兩個節點是鏈表頭(root)和鏈表尾。鏈表頭只是有一個指針,指向鏈表第一個節點,最后一個節點的指針指向NULL,標志該鏈表結束。
與隊列相比鏈表有很大優勢。鏈表不需要一塊地址連續的空間。因為這陣可以連接起各個節點。使得每個節點在物理上地址上處于不連續的離散狀態。但是在邏輯上卻是處于連續的地址空間。這也是程序員在編程過程中偏向于使用指針的原因吧!在使用鏈表過程中可以深刻體會到指針、結構體、地址之間巧妙關系。如果能有體會,那么高效的使用指針已經不是問題了。編程不是單純語言問題。其實是思維、機器、問題三方面的結合體。處理好這三方面關系問題即可得到完美的解決。
書中介紹了鏈表的創建、插入、刪除等。如果在隊列中某個位置插入一個節點,需要將該位置以后節點向后移動。這在數據量大時消耗的時間非常可觀的。但是鏈表只需要修改兩個節點的指針即可完成。在數據量比較大時顯得非常高效。刪除鏈表也是一樣的。隊列需要移動節點,鏈表只需修改上一節點的指針。如果后銷毀該節點即可。
一般單鏈表的遍歷只能單向進行。每次遍歷只能從鏈表頭開始,到鏈表尾結束。為了提高遍歷自由度,作者介紹了雙向鏈表。可以從一個節點任意訪問其前趨和后趨節點。
一個問題總會帶來矛盾,雙鏈表解決表里問題,但是同時在插入、刪除方面帶來了副作用。因為同事要維護兩個指針。解決實際問題《數據結構》是非常重要的課程。如果能將其中理論用于實踐那么將事半功倍!
評論