一、引言
????????雙向鏈表是一種比單向鏈表更復雜的數據結構,每個節點除了包含數據和指向下一個節點的指針外,還包含一個指向前一個節點的指針。這種結構使得我們可以從鏈表的任何節點開始,向前或向后遍歷鏈表。
目錄
一、引言
二、節點定義
三、鏈表實現
四、鏈表操作
五、應用示例
下面是一個使用雙向鏈表類的示例:
輸出結果為:?
總結
二、節點定義
- 首先,我們需要定義一個雙向鏈表的節點類(Node),它包含數據成員、指向前一個節點的指針和指向下一個節點的指針。
class Node: def __init__(self, data=None): self.data = data self.prev = None self.next = None
三、鏈表實現
- 接下來,我們定義一個雙向鏈表類(DoublyLinkedList),它包含頭節點、尾節點和一系列操作鏈表的方法。
class DoublyLinkedList: def __init__(self): self.head = None self.tail = None def append(self, value): new_node = Node(value) if not self.head: self.head = new_node self.tail = new_node else: new_node.prev = self.tail self.tail.next = new_node self.tail = new_node def prepend(self, value): new_node = Node(value) if not self.head: self.head = new_node self.tail = new_node else: new_node.next = self.head self.head.prev = new_node self.head = new_node def delete(self, value): current = self.head while current: if current.data == value: if current == self.head and current == self.tail: self.head = None self.tail = None elif current == self.head: self.head = current.next self.head.prev = None elif current == self.tail: self.tail = current.prev self.tail.next = None else: current.prev.next = current.next current.next.prev = current.prev return True current = current.next return False def print_list(self): current = self.head while current: print(current.data, end=" ") current = current.next print()
四、鏈表操作
- 在雙向鏈表類中,我們實現了幾個基本操作:
append
(在尾部添加新節點)、prepend
(在頭部添加新節點)、delete
(刪除指定值的節點)和print_list
(打印鏈表中的所有元素)。
五、應用示例
-
下面是一個使用雙向鏈表類的示例:
doubly_linked_list = DoublyLinkedList()
doubly_linked_list.append(3)
doubly_linked_list.append(2)
doubly_linked_list.prepend(1)
doubly_linked_list.prepend(0) print("鏈表中的元素為:", end=" ")
doubly_linked_list.print_list() doubly_linked_list.delete(2) print("刪除元素2后的鏈表為:", end=" ")
doubly_linked_list.print_list()
-
輸出結果為:?
鏈表中的元素為: 0 1 3 2
刪除元素2后的鏈表為: 0 1 3
總結
????????雙向鏈表是一種功能強大的數據結構,它允許我們在兩個方向上遍歷鏈表,提供了更多的操作靈活性。在實際應用中,雙向鏈表常用于實現雙向隊列、雙向棧等數據結構,以及需要高效插入、刪除和遍歷操作的場景。