Java資料結構:連結串列
阿新 • • 發佈:2022-03-22
2. 連結串列(LinkedList)
2.1 簡介
-
連結串列是一種線性表,但不按線性順序儲存,儲存資料的記憶體空間不連續
-
執行復雜度:
- 插入和刪除:O(1),僅需要知道目標元素的上一個元素
- 查詢和訪問特定節點:O(n)
-
與陣列相比:
- ****非隨機訪問:存取第N個數據時需要訪問前(N-1)個數據
- 容量不固定,支援動態擴容。不需要預先知道資料大小,充分利用儲存空間,實現記憶體動態管理
- 佔用更多空間:連結串列中每個結點需要額外存放指向其他節點的指標
- 陣列使用的是連續記憶體空間對 CPU 的快取機制友好,連結串列則相反。
-
應用場景
- 儲存元素個數不確定,需要經常新增和刪除資料;反之使用該陣列
- 不需要支援隨機訪問
2.2 分類
常見連結串列有:
- 單鏈表
- 雙向連結串列
- 迴圈連結串列
- 雙向迴圈連結串列
2.2.1 單鏈表
- 單鏈表只有一個方向,結點只有一個後繼指標next指向後面的結點。
- 連結串列有一個頭結點(head),頭結點一般不儲存資訊,指標指向第一個元素結點的儲存位置
- 尾結點通常指向null
2.2.2 迴圈連結串列
迴圈連結串列是一種特殊的單鏈表,它的尾結點指向連結串列的頭結點
2.2.3 雙向連結串列
雙向連結串列包含兩個指標,一個prev指向前一個結點,一個next指向後一個結點
2.2.4 雙向迴圈連結串列
雙向迴圈連結串列的:
- 尾結點的next指向頭結點
- 頭結點的prev指向尾結點