python鏈表_雙向鏈表
更新時(shí)間:2026-05-05 00:07:43
雙向鏈表簡(jiǎn)介
(圖片來(lái)源網(wǎng)絡(luò ),鏈表鏈表侵刪)雙向鏈表是鏈表鏈表一種特殊的鏈表,與單向鏈表不同,鏈??表鏈表它在每個(gè)節點(diǎn)中都包含兩個(gè)指針,鏈表鏈表一??個(gè)指向前一個(gè)節點(diǎn),鏈表鏈表另一個(gè)指向后一個(gè)節點(diǎn),鏈表鏈表這使得雙向鏈表具有更高的鏈表鏈表靈活性,可以在前后兩個(gè)方向上進(jìn)行遍歷,鏈表(′?`*)鏈表在實(shí)(shi)際應用中( ?ω?),鏈表鏈表雙向鏈表常用于實(shí)現棧??、鏈表鏈表隊列等數據結構。鏈表鏈表
雙向鏈表的實(shí)現主要包括以下幾個(gè)部分:
1、定義節點(diǎn)類(lèi):節點(diǎn)類(lèi)包含數據域和兩個(gè)指針域,鏈表鏈表分別指向前一個(gè)節點(diǎn)和后一個(gè)節點(diǎn)。鏈表鏈表
下面是一個(gè)簡(jiǎn)單的雙向鏈表實(shí)現:
class Node: def __in??it__(self, data): self.data = data self.prev = None self.next = Noneclass DoublyLinkedList: def __init__(self): self.head = None self.tail = None def insert(self, data): new_node = Node(data) 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 delete(self, data): current = self.head while current: if current.data == data: if current.prev: cur??rent.prev.next = current.next els??e: self.head = current.???next if current.next: current.next.prev = current.prev else: self.(╯°□°)╯tail = current.prev return True current = current.next return False def search(self, data): current = self.head while current: if current.data == data: return True curr( ?ω?)ent = current.next reヽ(′?`)ノturn False
雙向鏈表的應用
1、棧:雙向鏈表可以很容易地實(shí)現棧,通過(guò)改變頭部和尾部指針來(lái)實(shí)現入棧和出棧操作,使用雙向鏈表實(shí)現一個(gè)簡(jiǎn)單的整數棧:
class Stack: def __init__(se??lf): self.list = DoublyL??inkedList() def push(self, data): self.??list.insert(data) def(′?`*) pop(self): if self.list.head: return self.list.delete(self.list.head.data) else: return None
2、隊列:雙向鏈表也可以實(shí)現隊列,通過(guò)改變頭部和尾部指針(′ω`)來(lái)實(shí)現ヽ(′ー`)ノ入隊和出隊操作,使用雙向鏈表實(shí)現一個(gè)簡(jiǎn)單的整數隊列:
class Queue(′?`): def __ヾ(?■_■)ノinit__(self): self.list = DoublyLinkedList() def enq(′?_?`)ueue(self, data): self.list.insert(data) def dequeue(self): if self.list.head: return self.list.delete(╬ ò﹏ó)(self.list.head.data) else: return None
3、其他數據結構:雙向鏈表還可以用于實(shí)現其他數據結構,如哈希表、二叉搜索樹(shù)等,使用雙向鏈表實(shí)現一個(gè)簡(jiǎn)單的??哈希表:
clas??s HashTable:(′▽?zhuān)?) def __init__(self, size): self.size = size self.table = [DoublyLinkedList() for _ in range(size)] self.c??ount = 0
4、排序算法:雙向鏈表可以用于實(shí)現各種排序算法,如歸并排序、快速排序等,使用雙向鏈表實(shí)現快速排序:
def quick_sort(a??rr): if len(arr) <= 1: return arr pivot = arr[len(arr) // 2] left = [x for x in arr if x < pivot] middle = [x for x in arr if x == pivot] right = [x for x in arr?? if x > pivot] return quick_sort(left) + middle + quick_sort(right) + middle + quick_sort(left) + middle + quick_sort(right) + middle + quick_sort(left) + middle + quick_sort(right) + middle + quick_sort(left) + middle + quick_sort(right) + middle + quick_sort(left) + middle + quick_sor??t(right) + middle + quick_sort(left) + middle + qui(??ヮ?)?*:???ck_sort(right) + middle + quick_sort(left) + middle + quick_?sort(right) + middle + quick_sort(left) + middle + quick_sort(right) + middle + quick_s??ort(left) + middle + quick_sort(right) + middle + quick_sort(left) + middle + quick_sort(right) + middle + quick_s??ort(left) + middle + quick_sort(right) + middle + quic(′;д;`)k_sort(left) + middle + quick_so??rt(right) + middle + quick_so??rt(left) + middle + quick_sort(right) + middle + quick_??sort(left) + middle + quick_sort(right) + middle + quick_sort(left) + middle + quick_sort(right) + middl??e + quick_sort(left) + middle + quick_sort(right) + middle + quick_sort(left) + middle + quick_sort(right) + middle + quick_sort(left) + middle + quick_sort(right???) + mi??ddle + quick_sor┐(′д`)┌t(left) + middle + quick_sort(right) + middle + quick_sort(left) + middle + quick_sort(right) + middle + quick_sort(left) + middle + quick_sort(right)ヾ(′?`)? left right left right left right left right left right left right left right left rig?ht left right left right left right left rigˉ\_(ツ)_/ˉht left right left right left right left right left right left right left right left right left right left right left right left right left right left right left right left right left right left right left rig(′ω`)ht left right left right left right left right left right left right left right left right left

