資料結構與演算法之美 鍊錶

2021-10-06 17:55:34 字數 1062 閱讀 7294

1.如何實現lru快取淘汰演算法

答:回答這個問題之前,我們首先了解一下什麼是快取

2.鍊錶的三種形式:單鏈表、雙向鍊錶、迴圈鍊錶

簡介一下單鏈表:

頭節點用於記錄基位址,有了它我們就可以遍歷整條鍊錶,而尾節點特殊地方不是指向下乙個節點,而是指向乙個空位址。

鍊錶因為不是乙個連續的位址,所以不需要考慮連續性,鍊錶對於插入刪除就是o(1),鍊錶對於查詢就不如陣列那麼高效,就需要o(n),因為每個節點只知道自己後面是誰,所以查詢第k個元素,需要從頭開始遍歷。

迴圈鍊錶

迴圈鍊錶是一種特殊單鏈表,迴圈鍊錶與單鏈表的區別就是迴圈鍊錶的尾節點指向的是頭節點

雙向鍊錶實際場景:

刪除節點中值等於某個值的節點

答:雖然鍊錶的刪除操作時o(1),但是查詢給定值時需要遍歷鍊錶的o(n),所以刪除給定值的時間複雜度是o(n)

其實快取就是一種用空間來換時間複雜度的例子,就是我們把資料放在記憶體中,雖然比較耗費記憶體,但是讀取效率很快

在指定節點前插入節點,雙向鍊錶是高於單鏈表時候,比如我們刪除某個節點,知道刪除這個節點,需要知道它的先驅節點,但是單鏈表需要遍歷才可以知道單鏈表,雙向鍊錶就不需要這麼繁瑣,它可以直接就知道先驅節點,所以刪除指定節點的時候,雙向鍊錶就是o(1),單鏈表就是o(n)

如何實現基於鍊錶lru快取淘汰演算法?

答:1.如果此資料之前已經被快取到鍊錶中,我們遍歷得到這個資料對應的結點,並將其從原來位置刪除,再插入到鍊錶頭部。

2.如果此資料沒有在快取鍊錶中,又可以分為兩種情況

如果快取未滿,則將此節點直接插入到鍊錶頭部

如果快取已經滿了,則鍊錶尾節點刪除,將新的資料節點插入鍊錶得頭部。

如何輕鬆寫出鍊錶**?

1.理解指標或者引用的含義?

2.警惕指標丟失與記憶體洩漏

資料結構與演算法之美 鍊錶

如何優雅的寫出鍊錶 6大學習技巧 一 理解指標或引用的含義1.含義 將某個變數 物件 賦值給指標 引用 實際上就是就是將這個變數 物件 的位址賦值給指標 引用 2.示例 p next q 表示p節點的後繼指標儲存了q節點的記憶體位址。p next p next next 表示p節點的後繼指標儲存了p...

《資料結構與演算法之美》筆記 鍊錶

typedef struct node node 陣列和鍊錶都是線性表。陣列必須是連續空間,而鍊錶無所謂。鍊錶 單鏈表 迴圈鍊錶 雙向鍊錶 陣列 插入 刪除的時間複雜度是o n 隨機訪問的時間複雜度是o 1 鍊錶 插入 刪除的時間複雜度是o 1 隨機訪問的時間複雜端是o n 快取淘汰策略 先進先出策...

資料結構與演算法之美 03鍊錶

陣列 缺點 大小固定 優點 簡單實用,訪問效率更高 可借助cpu快取機制 鍊錶 缺點 記憶體不連續,訪問效率不高。對記憶體使用苛刻,當鍊表發生頻繁插入 刪除操作時,會導致頻繁的記憶體申請和釋放。優點 鍊錶本身沒有大小的限制,天然地支援動態擴容 1 在刪除給定指標指向的結點時,我們已經找到了要刪除的結...