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