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

C語言雙向循環鏈結串列實作:建立、搜尋、列印與插入完整程式碼

     編輯:關於C語言

雙向循環鏈結串列節點結構

typedef struct node {
    char name[20];
    struct node *llink, *rlink;  // 左/右鏈指標
} stud;
  • llink:指向直接前驅節點
  • rlink:指向直接後繼節點
  • 頭節點 h 的 rlink 指向第一個資料節點,llink 指向最後一個資料節點
  • 首尾相連形成環狀

核心功能函數

1. 建立串列 creat(n)

  • 配置頭節點,初始化 name[0]='\0'、雙鏈指向自己。
  • 迴圈配置 n 個資料節點,輸入姓名,雙向鏈接。
  • 最後首尾相連:h->llink = 最後節點; 最後節點->rlink = h;
  • 回傳頭節點指標。

2. 搜尋節點 search(h, x)

  • 從 h->rlink 開始遍歷,直到回到 h。
  • 用 strcmp 比對姓名,找到回傳節點指標,否則列印錯誤。

3. 列印串列 print(h)

  • 從 h->rlink 遍歷至 h,輸出每個節點姓名。

4. 插入節點 insert(p) —— 在節點 p 之後插入

void insert(stud *p) {
    stud *s = malloc(sizeof(stud));
    printf("請輸入要插入的姓名: ");
    scanf("%s", stuname);
    strcpy(s->name, stuname);

    s->rlink = p->rlink;      // 新節點右鏈指向 p 的後繼
    p->rlink = s;             // p 右鏈指向新節點
    s->llink = p;             // 新節點左鏈指向 p
    (s->rlink)->llink = s;    // 原後繼節點左鏈指向新節點
}

四步完成雙向鏈接,順序關鍵:先連新節點的雙鏈,再修改鄰居指向。

主程式流程

  1. 建立 10 人串列 head = creat(N)。
  2. 列印初始串列。
  3. 輸入欲查找姓名,呼叫 search() 取得節點指標。
  4. 呼叫 insert() 在該節點後插入新節點。
  5. 再次列印驗證插入結果。

記憶體管理提醒

  • 每次 malloc 需檢查回傳值是否為 NULL。
  • 程式結束前應釋放所有節點記憶體(範例未示範,實務必做)。
  • 雙向循環串列刪除節點同理:修改前驅、後繼的雙鏈指向,再 free 目標節點。

應用場景

雙向循環鏈結串列適合需雙向遍歷、頻繁插入刪除、環狀輪詢的場景:音樂播放清單、圓桌會議發言順序、作業系統行程排程等。

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