目錄
一、涉及到的知識點
1.定義
2.雙向鏈表與單向鏈表的區別
二、實例
一、涉及到的知識點
1.定義
????????在雙向鏈表中,每個節點有兩個指針域,一個指向它的前一個節點(即直接前驅),另一個指向它的后一個節點(即直接后繼)。這種設計使得雙向鏈表可以進行雙向遍歷,即可以從頭節點開始向前遍歷,也可以從尾節點開始向后遍歷。
????????雙向鏈表的節點結構通常如下所示:
struct Node
{// 數據域int data;// 指向直接前驅的指針Node* prev;// 指向直接后繼的指針Node* next;
};
2.雙向鏈表與單向鏈表的區別
????????雙向鏈表的算法描述和單向鏈表基本相同,但是雙向鏈表在刪除和插入節點時與單向鏈表有很大的不同:雙向鏈表在刪除節點時,不但要修改節點的直接后繼指針,還要同時修改節點的直接前驅指針。在插入時更是要修改插入節點的前驅和后繼的兩個方向上的指針。
二、實例
????????在實例的雙向鏈表類中,設計一個Append方法向鏈表的末尾追加初始數據5,2,8,1。然后用Print方法顯示鏈表數據。
// 雙向鏈表實現:Append方法、Print方法namespace _132_1
{public class Objects(int num, string name, int count){public int Num { get; set; } = num;public string Name { get; set; } = name;public int Count { get; set; } = count;}public class ListNode(Objects obj){public Objects Object { get; set; } = obj;public ListNode? Next { get; set; } = null;}public class LinkedList{private ListNode? _head;private ListNode? _tail;public void Append(Objects obj){ListNode newNode = new(obj);if (_head == null){_head = newNode;_tail = newNode;}else{_tail!.Next = newNode;_tail = newNode;}}public void Print(){ListNode? current = _head;while (current != null){Console.WriteLine(current.Object.Num);current = current.Next;}}}public class Program{static void Main(string[] args){ArgumentNullException.ThrowIfNull(args);LinkedList linkedList = new();linkedList.Append(new Objects(5, "Five", 1));linkedList.Append(new Objects(2, "Two", 2));linkedList.Append(new Objects(8, "Eight", 3));linkedList.Append(new Objects(1, "One", 4));linkedList.Print();}}
}
//運行結果:
/*
5
2
8
1*/