小白資料結構學習 鍊錶

2021-10-05 01:13:48 字數 1376 閱讀 6900

鍊錶

使用指標將零散的記憶體塊鏈結起來使用,形成鍊錶,鍊錶包括稱為記憶體塊的結點和指向下乙個記憶體塊位址的後繼指標「next」

鍊錶分為單鏈表,迴圈鍊錶,雙向鍊錶以及雙向迴圈鍊錶。

單鏈表的表尾指標指向null,只擁有next指標指向下乙個記憶體塊。

迴圈鍊錶在單鏈表的基礎上將尾指標指向頭結點。

雙向鍊錶擁有next指標的同時還擁有可以指向上乙個結點的前驅指標「prev」

雙向迴圈鍊錶顧名思義即將雙向鍊錶的尾後繼指標指向頭結點,頭前驅指標指向尾結點。

鍊錶特點

鍊錶是以指標鏈結,指向下乙個資料的位址,所以對於鍊錶來說,插入刪除就會比較迅速,時間複雜度為o(1),但要查詢指定值就得從頭遍歷,時間複雜度為o(n)。

鍊錶與陣列區別

鍊錶和陣列都是比較基礎和常用的資料結構型別,不同的是陣列是連續的儲存空間,鍊錶是不連續的。陣列按位址查詢的速度快,但插入刪除的速度慢,鍊錶插入刪除的速度快,但查詢的速度慢。

時間複雜度

鍊錶陣列

插入刪除

o(1)

o(n)

查詢o(n)

o(1)

鍊錶實現lur快取演算法

lur快取演算法即最近最少使用策略,就是將最近最少使用的淘汰掉。

使用鍊錶實現lur的思想如下:

根據給定的查詢值,從單鏈表頭開始遍歷鍊錶,

1、如果查詢到指定值,將鍊錶中指定值刪除,再將其插入鍊錶頭部。

2、未查找到指定值,則有如下情況:

(1) 如果快取未滿,將指定值插入到鍊錶頭部。

(2) 如果快取已滿,將鍊錶尾部刪掉,再將指定值插入鍊錶頭部。

指標丟失和記憶體洩露是很危險的,而新手很容易寫出忘記釋放記憶體,或者丟失指標的**來,比如要在ab間插入x時,假如指標p指向a:

p-

>next = x;

x-next = p-

>next

這樣就會讓x的下乙個指向x,鍊錶就會斷掉

鍊錶中的「哨兵」節點是解決邊界問題的,不參與業務邏輯。如果我們引入「哨兵」節點,則不管鍊錶是否為空,head指標都會指向這個「哨兵」節點。我們把這種有「哨兵」節點的鍊錶稱為帶頭鍊錶,相反,沒有「哨兵」節點的鍊錶就稱為不帶頭鍊錶。

處理好邊界問題,在編碼完成後,需要檢視以下狀況:

1、鍊錶為空時是否可以正常執行

2、鍊錶長度為1時是否可以正常執行

3、鍊錶長度為2時是否可以正常執行

4、鍊錶在處理頭結點和尾指標的時候是否可以正常執行

畫圖舉例可以清晰的讓你看出鍊錶的順序鏈結等。

資料結構學習 鍊錶

將從下面4部分進行介紹 首先介紹鍊錶是什麼,然後介紹為什麼定義鍊錶,接著是鍊錶的分類,最後簡單介紹一下鍊錶結點的插入與刪除方法。首先,在介紹鍊錶之前,我們先介紹一下什麼是順序儲存結構。我們知道資料在計算機中的儲存就像貨物在倉庫中的儲存一樣,不但占用一定的空間,還要有乙個標示儲存位置的位址。計算機通過...

資料結構學習 鍊錶

由於不必須按順序儲存,鍊錶在插入的時候可以達到o 1 的複雜度,比另一種線性表順序表快得多,但是查詢乙個節點或者訪問特定編號的節點則需要o n 的時間,而線性表和順序表相應的時間複雜度分別是o logn 和o 1 使用鍊錶結構可以克服陣列鍊錶需要預先知道資料大小的缺點,鍊錶結構可以充分利用計算機記憶...

資料結構學習 鍊錶結構

儲存結構定義 struct node typedef struct node ptrtonode typedef ptrtonode list typedef ptrtonode position struct node 書寫 package thedatastructureaboutlinked ...