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

單向循環鏈表完整操作集:C 語言標準庫級實現與測試

     編輯:關於C語言

單向循環鏈表完整操作集:C 語言標準庫級實現與測試

本文提供一個功能完備、代碼規範的單向循環鏈表 C 實現,含頭結點,尾結點 next 指向頭結點。涵蓋初始化、銷毀、清空、判空、長度、按位查找、按值定位、前驅/後繼查找、插入、刪除、尾插建表、遍歷顯示等 14 個核心操作,並附帶完整測試主程序。

核心結構與輔助函數

typedef struct Node { int data; struct Node* next; } Node, *LinkList;

int Length_SCL(LinkList L) { // 以頭結點為參考,遍歷計數
    int len = 0; LinkList p = L;
    while (p->next != L) { len++; p = p->next; }
    return len;
}

關鍵操作實現精要

  • 插入:找到第 position-1 個結點 p,新結點 s->next = p->next; p->next = s;。
  • 刪除:找到第 position-1 個結點 p,temp = p->next; p->next = temp->next; free(temp);。
  • 前驅查找:若目標為首元,需遍歷至尾結點;否則雙指針 p、q 同步前進,q 為 p 的前驅。
  • 尾插建表:維護 tail 指針,新結點 next 指向頭結點,tail->next = s; tail = s;。

測試驗證覆蓋場景

int main() {
    LinkList L; InitialList(&L);
    TailCreate_SCL(&L, 3); Display_SCL(L); // 建表、顯示
    ClearList(&L); // 清空
    TailCreate_SCL(&L, 5); // 重建
    GetElement_SCL(L, 4); GetElement_SCL(L, 6); // 合法/非法位置查找
    ElementLocate_SCL(L, 1); ElementLocate_SCL(L, 9); // 存在/不存在值定位
    PriorElement_SCL(L, 1); PriorElement_SCL(L, 5); // 首元/中間元前驅
    NextElement_SCL(L, 5); NextElement_SCL(L, 17); // 尾元/不存在值後繼
    InsertList_SCL(&L, 2, 888); Display_SCL(L); // 中間插入
    InsertList_SCL(&L, 1, 666); Display_SCL(L); // 首元插入
    InsertList_SCL(&L, 8, 999); Display_SCL(L); // 尾後插入(合法位置 length+1)
    DeleteList_SCL(&L, 5); Display_SCL(L); // 中間刪除
    DeleteList_SCL(&L, 1); Display_SCL(L); // 首元刪除
}

測試輸出驗證了所有邊界條件:空表操作、首尾操作、越界保護、環狀結構完整性(Display_SCL_1 驗證無 NULL 斷裂)。

工程級代碼規範亮點

  1. 統一錯誤處理:參數檢查前置,printf 錯誤信息並返回,不調用 exit() 破壞調用者流程。
  2. 內存安全:malloc 檢查失敗、free 及時、刪除後指針斷開。
  3. 介面一致性:所有修改操作接受 LinkList*(二級指針),查詢操作接受 LinkList。
  4. 註解完善:每函數標註參數、返回值、前置條件、時間複雜度。

總結

此實現可作為教學參考或項目基礎組件。理解「頭結點哨兵簡化邊界處理」、「尾結點指向頭結點形成環」兩大設計決策,是掌握循環鏈表的關鍵。

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