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

C 語言靜態鏈表入門:陣列實現單鏈表

     編輯:關於C語言

什麼是靜態鏈表?

用**結構體陣列**模擬鏈表:節點預先分配在陣列中,用**陣列下標**代替指標作為「鏈接」。優點:無動態分配開銷、嵌入式友好、易於序列化。缺點:容量固定、插刪需移動或維護閒置鏈表。

代碼實現


#include <stdio.h>

struct Node {
    int num;
    int next;   // 下標,-1 表空
} nodes[3] = {
    {1, 1},   // nodes[0] → nodes[1]
    {2, 2},   // nodes[1] → nodes[2]
    {3, -1}   // nodes[2] → 末尾
};

int main() {
    int head = 0;          // 頭節點下標
    int p = head;
    puts("num");
    while (p != -1) {
        printf("%d\n", nodes[p].num);
        p = nodes[p].next;
    }
    return 0;
}

關鍵點

  • next 存**下標**而非指標,-1 相當於 NULL。
  • 陣列大小固定,編譯期確定,適合**不頻繁插刪、容量可預估**場景。
  • 遍歷邏輯與動態鏈表一致,只把 p = p->next 換成 p = nodes[p].next。

進階:靜態鏈表插入/刪除


// 維護一個「空閒鏈表」free_list,初始串聯所有未用下標
int free_list = 0;  // 假設 nodes[0..MAX-1] 全空
for (int i=0; i

這就是編譯器符號表、操作系統文件系統 inode 表、數據庫頁鏈表的核心思想。

總結

靜態鏈表用**下標代替指標**,將動態結構「靜態化」,是資源受限環境的經典選擇。理解其本質是「陣列 + 索引鏈接」,有助於掌握更高級的數據結構(如 B+ 樹頁鏈、內存池 freelist)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved