鏈表學習筆記


鏈表是一種物理存儲單元上非連續、非順序的存儲結構,數據元素的邏輯順序是通過鏈表中的指針將一組零散的內存塊串聯起來實現的。

一、單鏈表

爲了將所有的結點串起來,每個鏈表的結點除了存儲數據之外,還需要記錄鏈上的下一個結點的地址,記錄下個結點地址的指針叫作後繼指針 next:
在這裏插入圖片描述
頭結點用來記錄鏈表的基地址,可以遍歷得到整條鏈表。尾結點的指針不是指向下一個結點,而是指向一個空地址 NULL,表示這是鏈表上最後一個結點。

Note: 鏈表中第一個結點的存儲位置叫做頭指針,可以沒有頭結點但不能沒有頭指針,頭結點是爲了操作的統一與方便而設立的,放在第一個元素結點之前,其數據域一般無意義(存放鏈表的長度…)。

二、循環鏈表

循環鏈表是一種特殊的單鏈表,單鏈表的尾結點指針指向空地址,表示這就是最後的結點了。而循環鏈表的尾結點指針是指向鏈表的頭結點。
在這裏插入圖片描述

三、雙向鏈表

單向鏈表只有一個方向,結點只有一個後繼指針 next 指向後面的結點。而雙向鏈表,它支持兩個方向,每個結點不止有一個後繼指針 next 指向後面的結點,還有一個前驅指針 prev 指向前面的結點:
在這裏插入圖片描述
向鏈表需要額外的兩個空間來存儲後繼結點和前驅結點的地址。所以,如果存儲同樣多的數據,雙向鏈表要比單鏈表佔用更多的內存空間,用空間換時間

四、關於順序存儲與鏈式存儲中插入刪除操作的效率PK

無論是單鏈表的插入操作還是刪除操作,都是由兩部分組成的:一是遍歷查找第i個元素,二是實現插入或刪除操作

就整個算法而言,他們的時間複雜度都是O(n),這樣來看的話,再不知道要找的第i個元素所處的位置時,單鏈表的插入刪除操作和順序存儲是沒有什麼優越性的。

但是!如果知道要插入或者刪除的元素的位置時,鏈式存儲就表現出它的優越性了。假如我們要在a10與a11之間插入10個元素,那麼順序存儲每插入一個元素後面的元素就要移動一次位置,每次都是O(n)。而鏈式存儲,只需要第一次時找到要插入的那個位置,後面的就只是賦值移動指針而已,時間複雜度爲O(1)。

因此:對於插入或者刪除操作越頻繁的操作,單鏈表的效率優勢就越是明顯

五、練習

發佈了138 篇原創文章 · 獲贊 146 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章