首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言問答

C語言線性表與鏈表的區別:順序存儲 vs 鏈式存儲

     編輯:C 語言問答

定義層面

  • 線性表:邏輯結構,零或多個資料元素的有限序列,強調「邏輯上相鄰」。
  • 順序表:線性表的 **順序存儲** 實現 (陣列),物理位址連續。
  • 鏈表:線性表的 **鏈式存儲** 實現 (節點 + 指標),物理位址可不連續。

核心差異對比

代碼片段解讀

// 順序表插入 (教材典型代碼)
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,性能通常優於手寫鏈表。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
維度順序表 (陣列)鏈表
記憶體分配靜態/動態陣列,連續區塊節點動態分配,分散
隨機存取O(1) a[i]O(n) 遍歷
插入/刪除O(n) 需搬移元素O(1) 僅修改指標 (已定位前驅)
空間開銷無額外指標每節點額外指標 (32/64 位)
快取友好極佳 (空間局部性)差 (指標追逐)
容量擴展需重新分配複製自然增長