鏈表:用一組任意儲存單元儲存線性表元素的資料結構。
單鏈表:節點單向排列。每個節點包含兩部分:
typedef struct node {
char name[20]; // 資料域:姓名
struct node *link; // 指標域:指向下一節點
} stud;
#include <stdio.h>
#include <stdlib.h>
#define N 10
typedef struct node {
char name[20];
struct node *link;
} stud;
stud *creat(int n) { // 建立單鏈表,參數 n 為節點數
stud *p, *h, *s; // h: 表頭指標, p: 前一節點, s: 當前節點
int i;
// 分配表頭節點
if ((h = (stud *)malloc(sizeof(stud))) == NULL) {
printf("無法分配記憶體!\n");
exit(0);
}
h->name[0] = '\0'; // 表頭資料域置空
h->link = NULL; // 表頭指標域置空
p = h; // p 指向表頭
for (i = 0; i < n; i++) {
// 分配新節點
if ((s = (stud *)malloc(sizeof(stud))) == NULL) {
printf("無法分配記憶體!\n");
exit(0);
}
p->link = s; // 將新節點鏈接到 p 之後
printf("請輸入第 %d 個人的姓名: ", i+1);
scanf("%s", s->name); // 儲存資料
s->link = NULL; // 新節點指標域置空
p = s; // p 移動到新節點
}
return h; // 返回表頭指標
}
int main() {
int number = N;
stud *head;
head = creat(number); // 建立鏈表並取得表頭
// 此處可加入遍歷、查找等操作
return 0;
}
n 次:分配新節點 → 鏈接到尾部 → 讀取資料 → 移動尾指標NULLlink = NULL 標記鏈表結尾提醒: 撰寫動態分配程式時,請務必對每次分配結果進行檢查,避免空指標解引用導致崩潰。