數據結構和算法之美總結——鏈表

底層結構

  1. 數組是需要連續的一整塊內存來進行存儲的,而鏈表相反,它通過指針將零散的內存空間串起來使用。

數據插入

  1. 因爲鏈表是不連續的內存空間,插入和刪除會非常的快

查詢

  1. 鏈表要想隨機訪問第 k 個元素,就沒有數組那麼高效了。因爲鏈表中的數據並非連續存儲的,所以無法像數組那樣,根據首地址和下標,通過尋址公式就能直接計算出對應的內存地址,而是需要根據指針一個結點一個結點地依次遍歷,直到找到相應的結點。
  2. 時間複雜度爲O(n)

應用

基於鏈表實現 LRU 緩存淘汰算法

維護一個有序單鏈表,越靠近鏈表尾部的結點是越早之前訪問的。當有一個新的數據被訪問時,我們從鏈表頭開始順序遍歷鏈表。

  1. 如果此數據之前已經被緩存在鏈表中了,我們遍歷得到這個數據對應的結點,並將其從原來的位置刪除,然後再插入到鏈表的頭部。
  2. 如果此數據沒有在緩存鏈表中,又可以分爲兩種情況:如果此時緩存未滿,則將此結點直接插入到鏈表的頭部;如果此時緩存已滿,則鏈表尾結點刪除,將新的數據結點插入鏈表的頭部。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章