1. 程式人生 > 其它 >Java資料結構:連結串列

Java資料結構:連結串列

2. 連結串列(LinkedList)

2.1 簡介

  • 連結串列是一種線性表,但不按線性順序儲存,儲存資料的記憶體空間不連續

  • 執行復雜度:

    • 插入和刪除:O(1),僅需要知道目標元素的上一個元素
    • 查詢和訪問特定節點:O(n)
  • 與陣列相比:

    • ****非隨機訪問:存取第N個數據時需要訪問前(N-1)個數據
    • 容量不固定,支援動態擴容。不需要預先知道資料大小,充分利用儲存空間,實現記憶體動態管理
    • 佔用更多空間:連結串列中每個結點需要額外存放指向其他節點的指標
    • 陣列使用的是連續記憶體空間對 CPU 的快取機制友好,連結串列則相反。
  • 應用場景

    • 儲存元素個數不確定,需要經常新增和刪除資料;反之使用該陣列
    • 不需要支援隨機訪問

2.2 分類

常見連結串列有:

  1. 單鏈表
  2. 雙向連結串列
  3. 迴圈連結串列
  4. 雙向迴圈連結串列

2.2.1 單鏈表

  • 單鏈表只有一個方向,結點只有一個後繼指標next指向後面的結點。
  • 連結串列有一個頭結點(head),頭結點一般不儲存資訊指標指向第一個元素結點的儲存位置
  • 尾結點通常指向null

2.2.2 迴圈連結串列

迴圈連結串列是一種特殊的單鏈表,它的尾結點指向連結串列的頭結點

2.2.3 雙向連結串列

雙向連結串列包含兩個指標,一個prev指向前一個結點,一個next指向後一個結點

2.2.4 雙向迴圈連結串列

雙向迴圈連結串列的:

  • 尾結點的next指向頭結點
  • 頭結點的prev指向尾結點