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

鏈表的 C 語言實現(二):單鏈表建立與節點結構

     編輯:C 語言基礎

單鏈表基本概念

鏈表:用一組任意儲存單元儲存線性表元素的資料結構。
單鏈表:節點單向排列。每個節點包含兩部分:

  1. 資料域:儲存節點本身的資料
  2. 鏈域/指標域:儲存下一個節點位址(指向直接後繼的指標)

節點結構定義

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;
}

關鍵步驟解析

  1. 建立表頭節點(不存實際資料,僅作鏈表入口)
  2. 循環 n 次:分配新節點 → 鏈接到尾部 → 讀取資料 → 移動尾指標
  3. 每次分配後必須檢查 NULL
  4. 最後節點 link = NULL 標記鏈表結尾

提醒: 撰寫動態分配程式時,請務必對每次分配結果進行檢查,避免空指標解引用導致崩潰。

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