鏈結串列是一種常見的資料結構,其與陣列有點類似,都是用來儲存資料的資料結構。差別為鏈結串列的元素在記憶體中並不是連續的,陣列為連續的。
以上這張圖為Singly Linked List單向鏈結串列,每個節點Node只有一個指標,單向鏈結串列只可以朝一個方向。
鏈結串列之優點
1. 元素在記憶體中不連續,不會有記憶體因為宣告而造成空間浪費的問題
2. 可以任意加入、刪除、插入元素,不需重新配置記憶體
3. 各元素間型態可以不相同
鏈結串列之缺點
1. 資料讀取較慢
2. 不允許隨機讀取: 搜尋特定節點需要按照順序讀取
3. 空間開銷較大,每個元素需要額外儲存指標
適用場景
1. 無法預期資料數量時
2. 需要頻繁插入及刪除資料
3. 需要頻繁分離及合併資料
4. 不需要隨機存取資料,不需要快速查詢資料
術語
Node
又稱”節點”,為組成鏈結串列最基礎元素,節點包含資料及指標,指標用以儲存指向其他節點的位址,並且有一個此Node的位址。
Head and Tail
Head為指向整個串列第一節點的指標。而Tail則為指向最後一個節點的指標。
藉由每個Node內儲存的Pointer指向下一個Node,就可以將多個Node串聯起來,形成每個Node位址不連續的狀態下,但一樣可以找到下一筆資料的資料結構。
Linked List 種類
單向鏈結串列
每個Node只有一個指標,用於指向下一個Node,在最後一個Node儲存一個特殊的標記作為結束符號,另外在一個固定的位址儲存指向第一個Node的指標(Head)。
雙向鏈結串列
每個Node有兩個指標,分別指向前後的Node。這樣可以從任何一個節點存取前一個節點,當然也可以存取後一個節點,以至整個鏈結串列。
迴圈鏈結串列
在迴圈鏈結串列中, 首節點和末節點被連接在一起。這種方式在單向和雙向鏈結串列中皆可實現。迴圈鏈結串列可以被視為「無頭無尾」。這種串列很利於節約資料儲存快取。