91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

C#中雙向鏈表的擴展性設計

c#
小樊
83
2024-08-29 04:53:55
欄目: 編程語言

在C#中,雙向鏈表是一種數據結構,它包含兩個指針,一個指向前一個節點,另一個指向后一個節點。為了實現一個具有擴展性的雙向鏈表,我們可以使用泛型和接口。這樣,我們可以輕松地為不同的數據類型和場景創建自定義的雙向鏈表。

首先,我們需要創建一個表示鏈表節點的類:

public class DoublyLinkedListNode<T>
{
    public T Value { get; set; }
    public DoublyLinkedListNode<T> Previous { get; set; }
    public DoublyLinkedListNode<T> Next { get; set; }

    public DoublyLinkedListNode(T value)
    {
        Value = value;
    }
}

接下來,我們需要創建一個表示雙向鏈表的接口:

public interface IDoublyLinkedList<T>
{
    void AddFirst(T value);
    void AddLast(T value);
    bool Remove(T value);
    bool Contains(T value);
    int Count { get; }
}

現在,我們可以實現這個接口,創建一個具體的雙向鏈表類:

public class DoublyLinkedList<T> : IDoublyLinkedList<T>
{
    private DoublyLinkedListNode<T> _head;
    private DoublyLinkedListNode<T> _tail;
    private int _count;

    public int Count => _count;

    public void AddFirst(T value)
    {
        var newNode = new DoublyLinkedListNode<T>(value);
        if (_head == null)
        {
            _head = newNode;
            _tail = newNode;
        }
        else
        {
            newNode.Next = _head;
            _head.Previous = newNode;
            _head = newNode;
        }
        _count++;
    }

    public void AddLast(T value)
    {
        var newNode = new DoublyLinkedListNode<T>(value);
        if (_tail == null)
        {
            _head = newNode;
            _tail = newNode;
        }
        else
        {
            newNode.Previous = _tail;
            _tail.Next = newNode;
            _tail = newNode;
        }
        _count++;
    }

    public bool Remove(T value)
    {
        var currentNode = _head;
        while (currentNode != null)
        {
            if (currentNode.Value.Equals(value))
            {
                if (currentNode.Previous != null)
                {
                    currentNode.Previous.Next = currentNode.Next;
                }
                else
                {
                    _head = currentNode.Next;
                }

                if (currentNode.Next != null)
                {
                    currentNode.Next.Previous = currentNode.Previous;
                }
                else
                {
                    _tail = currentNode.Previous;
                }

                _count--;
                return true;
            }
            currentNode = currentNode.Next;
        }
        return false;
    }

    public bool Contains(T value)
    {
        var currentNode = _head;
        while (currentNode != null)
        {
            if (currentNode.Value.Equals(value))
            {
                return true;
            }
            currentNode = currentNode.Next;
        }
        return false;
    }
}

現在,我們已經創建了一個具有擴展性的雙向鏈表實現。你可以根據需要為不同的數據類型和場景創建自定義的雙向鏈表。例如,你可以為整數、字符串或自定義對象創建雙向鏈表。

0
安新县| 格尔木市| 黔江区| 松溪县| 双辽市| 平山县| 崇左市| 颍上县| 红河县| 新安县| 彰武县| 临湘市| 资兴市| 堆龙德庆县| 长春市| 北流市| 竹北市| 瑞安市| 仁怀市| 兰州市| 西林县| 云和县| 浦城县| 东辽县| 沈阳市| 时尚| 申扎县| 门头沟区| 吉安市| 黑水县| 大足县| 邻水| 福鼎市| 和田县| 云安县| 崇阳县| SHOW| 霍山县| 华蓥市| 宝清县| 永寿县|