線性表是 相同數據類型 的 有限序列(n≥0)。除首尾元素外,每個元素有且僅有一個直接前驅/後繼。特點:長度有限、邏輯有序、類型統一、僅關注邏輯關係。線性表是邏輯結構,順序表/鏈表是其存儲實現。
用連續內存塊存儲,支持靜態分配與動態擴容。邏輯下標從 1 起,物理下標從 0 起。
邊界處理(長度 len=7):
// 插入位置 index ∈ [1, len+1] for (i = len; i >= index; i--) items[i] = items[i-1]; // 刪除位置 index ∈ [1, len] for (i = index; i < len; i++) items[i-1] = items[i];
節點定義:class Node { T item; Node next; }。允許離散內存,插刪只改指針 O(1)(定位除外),查找需遍歷 O(n)。
p,s.next=p.next; p.next=s;(先斷後連);p.next=q.next; q=null; 或數據域前移覆蓋。節點增設 prior,給定節點可 O(1) 插刪:
// p 後插 s s.next = p.next; p.next.prior = s; s.prior = p; p.next = s; // 刪 p 後繼 q p.next = q.next; q.next.prior = p;
next==-1 為終止。| 維度 | 順序表 | 鏈表 |
|---|---|---|
| 訪問方式 | 隨機 + 順序 | 僅順序 |
| 邏輯/物理鄰接 | 一致 | 不保證 |
| 插刪開銷 | 移動元素 O(n) | 改指針 O(1) |
| 空間利用率 | 高(無指針) | 低(額外指針) |
| 擴容靈活性 | 需拷貝 | 隨時申請節點 |
選型口訣:查多改少用順序,改多查少用鏈表;大小不明或頻繁擴容首選鏈表。