定義層面
- 線性表:邏輯結構,零或多個資料元素的有限序列,強調「邏輯上相鄰」。
- 順序表:線性表的 **順序存儲** 實現 (陣列),物理位址連續。
- 鏈表:線性表的 **鏈式存儲** 實現 (節點 + 指標),物理位址可不連續。
核心差異對比
| 維度 | 順序表 (陣列) | 鏈表 |
| 記憶體分配 | 靜態/動態陣列,連續區塊 | 節點動態分配,分散 |
| 隨機存取 | O(1) a[i] | O(n) 遍歷 |
| 插入/刪除 | O(n) 需搬移元素 | O(1) 僅修改指標 (已定位前驅) |
| 空間開銷 | 無額外指標 | 每節點額外指標 (32/64 位) |
| 快取友好 | 極佳 (空間局部性) | 差 (指標追逐) |
| 容量擴展 | 需重新分配複製 | 自然增長 |
代碼片段解讀
// 順序表插入 (教材典型代碼)
if (i < 1 || i > L->length + 1) return ERROR;
q = &(L->elem[i-1]); // 插入位置位址
for (p = &(L->elem[L->length-1]); p >= q; --p)
*(p+1) = *p; // 向後搬移
*q = e;
++L->length;
L->elem:資料陣列基址。
L->length:當前長度。
- 插入邏輯:從尾部向前搬移,騰出空位。
選型建議
- **頻繁隨機存取、長度固定/可預估** → 順序表 /
std::vector / 動態陣列。
- **頻繁中間插刪、長度不可預估、大對象** → 鏈表 /
std::list / 內存池優化。
- 現代 C++ 優先
std::vector + reserve,性能通常優於手寫鏈表。
- 上一篇文章: C語言運算子優先序與結合性完整表 (15 級)
- 下一篇文章: C語言經典教學視頻資源推薦:康輝、鄭鋼、翁凱等
Copyright ©
程式碼之家 All Rights Reserved