<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了Python程式碼實現雙連結串列的具體程式碼,供大家參考,具體內容如下
雙連結串列的每個節點有兩個指標: 一個指向後一個節點,另一個指向前一個節點
class Node(object): def __init__(self, item=None): #放資料 self.item= item #指向後一個節點 self.next = None #指向前一個節點 self.prior =None
此時當前連結串列第一個節點就是頭節點指向的節點 20就是第一個節點 下圖
node.next = self.head 當前節點指向原第一個節點
頭插法
如何插入呢
插入
p.next = curNode.next #指向後一個節點
curNode.next.prior = p #指向前一個節點
刪除
雙連結串列刪除
考慮特殊情況刪除的
正常刪除
雙連結串列刪除 30
#雙連結串列頭插法
#停在前一個位置了
count < (pos -1 )
#雙向連結串列 從左往右讀 class Node(object): """雙向連結串列節點""" def __init__(self,item): #放資料的節點 self.elem = item #指向後一個節點 self.next = None #指向前一個節點 self.prev = None #雙向連結串列 class LinkList(object): def __init__(self,node=None): #代表頭節點 self.__head = node #判斷連結串列是否為空 def is_empty(self): return self.__head == None def length(self): """返回連結串列的長度""" #cur遊標移動,從而實現遍歷元素的功能 cur = self.__head #count用來計數 count = 0 while cur != None: count += 1 #讓cur遊標可以向下移動 cur = cur.next return count #遍歷整個連結串列 def travel(self): if self.is_empty(): return #建立遊標等於起始節點 else: cur = self.__head while cur != None: print(cur.elem,end=" ") cur = cur.next print("") #頭插法 def add(self,item): #新節點 node = Node(item) if self.is_empty(): #頭節點指向了新的節點 self.__head = node else: #新節點指向原第一個節點 node.next = self.__head self.__head = node node.next.prev = node def append(self,item): """連結串列尾部新增元素""" node = Node(item) #定義新節點 #連結串列是否為空連結串列 if self.is_empty(): #如果為空,新的節點加了進去 self.__head = node else: #頭節點 建立遊標 cur = self.__head #設定指向頭結點的遊標 此時的當前連結串列第一個節點,就是頭節點指向的節點 #cur到最後一個節點停下 while cur.next != None: cur = cur.next #新增節點到尾部 cur道了最後一個結點 cur.next指向了新的節點node 從左往右讀 cur.next = node #當前的節點指向它前一個 node.prev = cur #插入法 #pos從零開始 def insert(self,pos,item): """在指定位置新增元素""" #指向不是頭部元素,self.__head的地址 # 為下一個元素,所以pre為下一個元素 if pos <= 0: #認為是頭插法 self.add(item) #假如長度是3 pos大於2要特殊處理 elif pos > (self.length()-1): #尾插法 self.append(item) else: #建立節點 新節點 node = Node(item) cur = self.__head count = 0 #動起來 while count < pos: count+=1 cur = cur.next #把節點連結到中間任意位置 插入前一個節點 此時,cur停在後一個節點 node.next = cur node.prev = cur.prev cur.prev.next = node cur.prev = node def remove(self,item): """刪除元素""" if self.is_empty(): return cur = self.__head #查詢所有的位置有沒有要刪除的,若有則刪除 while cur != None: #判斷cur指向的資料,是否為要刪除的資料 item要刪除的元素 if cur.elem == item: #判斷此節點是否為頭節點 #考慮特殊情況,恰好要刪除是第一個元素 當前的元素就是我要刪除的元素 if cur == self.__head: #如果刪除中間, 頭節點指向後一個節點 self.__head = cur.next #考慮連結串列只有一個節點 直接指向None if cur.next != None: #是否只有一個節點 cur.next.prev = None else: #中間節點 cur.prev.next = cur.next if cur.next != None: cur.next.prev = cur.prev break else: #沒有找到,cur遊標向繼續往下移動 cur = cur.next def search(self,item): """查詢結點是否存在""" #如果是一個空連結串列 if self.is_empty(): return False cur = self.__head while cur.next != self.__head: #cur資料是否為查詢的資料 item是要查的資料 if cur.elem == item: return True else: cur = cur.next #遍歷完成 cur指向None return False if __name__ == '__main__': ll = LinkList() #第一次的 print(ll.is_empty()) print(ll.length()) ll.append(1) print(ll.is_empty()) print(ll.length()) ll.append(2) ll.append(3) ll.append(4) ll.append(5) ll.travel() ll.insert(-1,50) ll.travel() ll.insert(2,60) ll.travel() ll.insert(10,300) ll.travel() ll.remove(50) ll.travel() ll.remove(300) ll.travel()
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45