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

C# 雙向鏈表完整實作(二):核心操作與程式碼深度解析

     編輯:關於C語言

雙向鏈表操作類架構

DBLinkList<T> 實作 IListDS<T> 介面,採用哨兵節點設計簡化邊界條件處理。雙向鏈表每個節點擁有 Prev 和 Next 兩個引用,使插入刪除操作需同時維護四個指標關係,複雜度較單向鏈表顯著提升。

核心欄位與建構式

private DBNode<T> header;

public DBLinkList()
{
    header = new DBNode<T>();
    header.Next = null;
    header.Prev = null;
}

關鍵操作實作細節

節點查找:FindNode

私有輔助方法,從頭節點向後遍歷至第 i 個位置,包含空表檢查與索引邊界驗證。

插入操作:雙重插入策略

  • Insert(前插):在目標節點前建立新節點,調整四個引用
  • InsertBack(後插):在目標節點後插入,同樣處理四個指標
// 前插核心邏輯
current.Prev.Next = newNode;
newNode.Next = current;
newNode.Prev = current.Prev;
current.Prev = newNode;

刪除操作

斷開目標節點的前後連結,並清空其引用協助 GC 回收:


current.Prev.Next = current.Next;
current.Next.Prev = current.Prev;
current.Prev = null;
current.Next = null;

追加操作優化

遍歷至尾節點直接掛載新節點,處理空表特殊情況。

已知問題與改進建議

  1. GetLength 效能:每次 O(n) 遍歷,建議維護 count 欄位達到 O(1)
  2. IsEmpty 判斷邏輯:依賴 header.Data == null 不可靠,應檢查 header.Next == null
  3. Locate 方法缺陷:迴圈未遞增計數器且未返回位置,需重寫
  4. 例外處理:建議拋出 ArgumentOutOfRangeException 取代 Console.Write

循環鏈表延伸

文末提及循環鏈表僅改變終止條件(判斷是否回到頭節點),核心操作邏輯大同小異,適合作為進階練習題目。

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