首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> .NET 實例教學

C# 資料結構實作:雙向鏈結清單

     編輯:.NET 實例教學

雙向鏈結清單 每個節點同時擁有前驅與後繼指標,支援雙向遍歷與高效率插入/刪除。以下提供完整 C# 實作與測試代碼。

節點類別

public class Node {
    public object Element;
    public Node FLink;  // 後繼
    public Node BLink;  // 前驅

    public Node() : this(null) { }
    public Node(object element) {
        Element = element;
        FLink = BLink = null;
    }
}

鏈結清單操作類別

public class LinkedList {
    public Node Header;  // 標頭節點,不存放資料

    public LinkedList() {
        Header = new Node("Header");
        Header.FLink = Header.BLink = null;
    }

    // 查找節點
    private Node Find(object item) {
        Node current = Header;
        while (current.Element != item) current = current.FLink;
        return current;
    }

    // 插入節點於 positionItem 之後
    public void InsertNode(object item, object positionItem) {
        Node current = Find(positionItem);
        if (current != null) {
            Node newNode = new Node(item);
            newNode.FLink = current.FLink;
            newNode.BLink = current;
            current.FLink = newNode;
            if (newNode.FLink != null) newNode.FLink.BLink = newNode;
        }
    }

    // 刪除節點
    public void Remove(object item) {
        Node p = Find(item);
        if (p.FLink != null) {
            p.BLink.FLink = p.FLink;
            p.FLink.BLink = p.BLink;
            p.FLink = p.BLink = null;
        }
    }

    // 正向列印
    public void Print() {
        Node current = Header;
        while (current.FLink != null) {
            Console.WriteLine(current.FLink.Element);
            current = current.FLink;
        }
    }

    // 反向列印
    public void PrintReverse() {
        Node current = Header;
        while (current.FLink != null) current = current.FLink; // 移至尾端
        while (current.BLink != null) {
            Console.WriteLine(current.Element);
            current = current.BLink;
        }
    }
}

測試程式


static void Main(string[] args) {
    LinkedList list = new LinkedList();
    // 手動建立初始鏈結
    Node n1 = new Node("Tommy");
    Node n2 = new Node("Wei");
    Node n3 = new Node("Chencaixia");
    Node n4 = new Node("weiwei");

    list.Header.FLink = n1; n1.BLink = list.Header;
    n1.FLink = n2; n2.BLink = n1;
    n2.FLink = n3; n3.BLink = n2;
    n3.FLink = n4; n4.BLink = n3; n4.FLink = null;

    list.InsertNode("test", "Chencaixia");
    list.Remove("Wei");
    list.Print();
    Console.ReadLine();
}

執行結果

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