鍊錶學習筆記

2021-09-29 13:38:40 字數 1262 閱讀 7308

鍊錶是一種物理儲存單元上非連續、非順序的儲存結構,資料元素的邏輯順序是通過鍊錶中的指標將一組零散的記憶體塊串聯起來實現的。

為了將所有的結點串起來,每個鍊錶的結點除了儲存資料之外,還需要記錄鏈上的下乙個結點的位址,記錄下個結點位址的指標叫作後繼指標 next:

頭結點用來記錄鍊錶的基位址,可以遍歷得到整條鍊錶。尾結點的指標不是指向下乙個結點,而是指向乙個空位址 null,表示這是鍊錶上最後乙個結點。

note: 鍊錶中第乙個結點的儲存位置叫做頭指標,可以沒有頭結點但不能沒有頭指標,頭結點是為了操作的統一與方便而設立的,放在第乙個元素結點之前,其資料域一般無意義(存放鍊錶的長度…)。

迴圈鍊錶是一種特殊的單鏈表,單鏈表的尾結點指標指向空位址,表示這就是最後的結點了。而迴圈鍊錶的尾結點指標是指向鍊錶的頭結點。

單向鍊錶只有乙個方向,結點只有乙個後繼指標 next 指向後面的結點。而雙向鍊錶,它支援兩個方向,每個結點不止有乙個後繼指標 next 指向後面的結點,還有乙個前驅指標 prev 指向前面的結點:

向鍊錶需要額外的兩個空間來儲存後繼結點和前驅結點的位址。所以,如果儲存同樣多的資料,雙向鍊錶要比單鏈表占用更多的記憶體空間,用空間換時間

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

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

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

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

學習筆記 鍊錶 鍊錶入門

重新學習程式語言日記,2011年12月29日 09 17分 定義乙個結構體 struct linkhead,p1,p2 首先定義了乙個結構體,結構體包括指標域,資料域。這個結構體就是你鍊錶裡面的節點。每個節點都包括了資料域,指標域。有了這麼乙個結構體。肯定就需要初始化這個結構體了。寫個函式來初始化鍊...

鍊錶學習筆記 順序鍊錶

順序鍊錶的主要思想就是使用乙個整型陣列來儲存資料的指標。在建立記憶體的時候如圖,用後面的陣列來儲存指標。大量使用 給void重新起個名字 封裝使用的資料j 讓其對使用者是透明的 typedef void seqlist typedef void seqlistnode seqlist seqlist...

鍊錶學習筆記 雙向鍊錶

這次 寫的是迴圈鍊錶,用的是節點連線。雙向鍊錶相比與一般鍊錶要注意的地方就是 頭部插入和尾部插入 不要進行空指標操作。非鍊錶尾部的處理 if next null node pre current 如果是在頭部插如 則沒有 前節點 if i 0 tlist lenght return 0 dlinkl...