數據結構(四)——鏈表

極客時間《數據結構與算法之美》學習筆記
常見的緩存淘汰策略:先進先出策略 FIFO(First In,First Out)、最少使用策略 LFU(Least Frequently Used)、最近最少使用策略 LRU(Least Recently Used)
數組和鏈表的區別:數組需要一塊連續的內存空間來存儲,對內存的要求比較高。鏈表不需要一塊連續的內存空間,它通過「指針」將一組零散的內存塊串聯起來使用。
鏈表擅長插入、刪除操作,時間複雜度爲O(1);查詢的效率不高,時間複雜度爲O(n)。
數組擅長通過下標隨機訪問元素,時間複雜度爲O(1);插入、刪除的效率不高,時間複雜度爲O(n)。

在這裏插入圖片描述
幾種最常見的鏈表結構:單鏈表、雙向鏈表、循環鏈表和雙向循環鏈表
在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
幾個鏈表代碼技巧:
技巧一:理解指針或引用的含義
將某個變量賦值給指針,實際上就是將這個變量的地址賦值給指針,或者反過來說,指針中存儲了這個變量的內存地址,指向了這個變量,通過指針就能找到這個變量。

技巧二:警惕指針丟失和內存泄漏

技巧三:利用哨兵簡化實現難度

技巧四:重點留意邊界條件處理
用來檢查鏈表代碼是否正確的邊界條件有這樣幾個:
如果鏈表爲空時,代碼是否能正常工作?
如果鏈表只包含一個結點時,代碼是否能正常工作?
如果鏈表只包含兩個結點時,代碼是否能正常工作?
代碼邏輯在處理頭結點和尾結點的時候,是否能正常工作?
技巧五:舉例畫圖,輔助思考
技巧六:多寫多練,沒有捷徑