課本源碼部分
第2章 線性表 - 單鏈表鏈式存儲
——《數據結構》-嚴蔚敏.吳偉民版
★有疑問先閱讀★
源碼使用說明 鏈接☛☛☛ 《數據結構-C語言版》(嚴蔚敏,吳偉民版)課本源碼+習題集解析使用說明
課本源碼合輯 鏈接☛☛☛ 《數據結構》課本源碼合輯
習題集全解析 鏈接☛☛☛ 《數據結構題集》習題解析合輯
文檔中源碼及測試數據存放目錄:數據結構\▲課本算法實現\▲02 線性表\04 SinglyLinkedList
概述
比起之前順序存儲的單鏈表,鏈式存儲有很多優點,比如刪除與插入更方便,不用來回移動大量元素。但與此對應的是存取指定位置元素時將變得費勁,因為順序存儲結構中,通過數組下標就可以獲取第i個元素,但是在鏈式存儲中,必須由頭指針或尾指針(如果有的話)開始遍歷整個鏈表直至尋找到需要的元素。在元素的查找效率方面,此兩種存儲結構無明顯差異。
解析
單鏈表鏈式存儲結構引入了鏈表的概念,鏈表由一個個小的結點組成,每個結點都包含一個數據域和指針域,指針域指向的是緊鄰的下一個結點,最后一個結點指針通常為NULL。如果將最后一個結點的指針指向開頭,那么這個鏈表就成了循環單鏈表。
值得注意的是,這兒所示的鏈表都是有頭結點的單鏈表。有頭結點意味着頭結點指針指向的結點數據域為空,頭結點的存在僅僅是作為標記單鏈表的開始,有頭結點的單鏈表在操作時更加方便,不用專門為頭結點的增刪情況寫額外代碼,這一點可以在實際應用中加以體會。
單鏈表鏈式結構如下圖:
可能涉及到的語法難點
單鏈表鏈式存儲也用到了動態分配內存。值得注意的是,由於頭結點的指針本身就是個結構指針,所以在初始化、創建、銷毀等需要改變頭結點指針的地方,則要注意函數形參為二級指針,即指向頭指針的指針。新手很容易犯的錯誤是該用二級指針的地方使用了一級指針,這樣做的后果就是明明函數內分配了所需內存,但是外面卻訪問不到,也可能明明函數內銷毀掉的內存,外面還可以訪問到。這樣不僅會引起內存訪問差錯,甚至會引起程序崩潰,所以,這一點很值得引起重視。
源碼
文件一 ☛ SinglyLinkedList.h
文件二 ☛ SinglyLinkedList.c
文件三 ☛ SinglyLinkedList-main.c (測試文檔)
文件四 ☛ TestData_HL.txt (頭插法數據文檔)
文件五 ☛ TestData_TL.txt (尾插法數據文檔)
測試結果展示