日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python数据结构与算法(第四天)

發布時間:2025/3/21 python 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python数据结构与算法(第四天) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

27.雙向鏈表及添加元素

雙向鏈表

一種更復雜的鏈表是“雙向鏈表”或“雙面鏈表”。每個節點有兩個鏈接:一個指向前一個節點,當此節點為第一個節點時,指向空值;而另一個指向下一個節點,當此節點為最后一個節點時,指向空值。

操作

  • is_empty() 鏈表是否為空
  • length() 鏈表長度
  • travel() 遍歷鏈表
  • add(item) 鏈表頭部添加
  • append(item) 鏈表尾部添加
  • insert(pos, item) 指定位置添加
  • remove(item) 刪除節點
  • search(item) 查找節點是否存在
class Node(object):"""雙向鏈表節點"""def __init__(self, item):self.item = itemself.next = Noneself.prev = None class DLinkList(object):"""雙向鏈表"""def __init__(self):self._head = None def is_empty(self):"""判斷鏈表是否為空"""return self._head == Nonedef length(self):"""返回鏈表的長度"""cur = self._headcount = 0while cur != None:count += 1cur = cur.nextreturn countdef travel(self):"""遍歷鏈表"""cur = self._headwhile cur != None:print cur.item,cur = cur.nextprint "" def add(self, item):"""頭部插入元素"""node = Node(item)if self.is_empty():# 如果是空鏈表,將_head指向nodeself._head = nodeelse:# 將node的next指向_head的頭節點node.next = self._head# 將_head的頭節點的prev指向nodeself._head.prev = node# 將_head 指向nodeself._head = nodedef append(self, item):"""尾部插入元素"""node = Node(item)if self.is_empty():# 如果是空鏈表,將_head指向nodeself._head = nodeelse:# 移動到鏈表尾部cur = self._headwhile cur.next != None:cur = cur.next# 將尾節點cur的next指向nodecur.next = node# 將node的prev指向curnode.prev = cur def insert(self, pos, item):"""在指定位置添加節點"""if pos <= 0:self.add(item)elif pos > (self.length()-1):self.append(item)else:node = Node(item)cur = self._headcount = 0# 移動到指定位置的前一個位置while count < (pos-1):count += 1cur = cur.nextnode.next = curnode.prev = cur.prevcur.prev.next = nodecur.prev = node

28.雙向鏈表刪除元素

def remove(self, item):"""刪除一個節點"""cur = self.__headwhile cur != None:if cur.elem == item:#先判斷此結點是否是頭節點#頭節點if cur == self.__head:self.__head = cur.nextif cur.next:#判斷鏈表是否只有一個結點cur.next.prev = Noneelse:cur.prev.next = cur.nextif cur.next:cur.next.prev = cur.prevbreakelse:cur = cur.next

29.單向循環鏈表遍歷和求長度

單向循環鏈表

單鏈表的一個變形是單向循環鏈表,鏈表中最后一個節點的next域不再為None,而是指向鏈表的頭節點。

?

操作

  • is_empty() 判斷鏈表是否為空
  • length() 返回鏈表的長度
  • travel() 遍歷
  • add(item) 在頭部添加一個節點
  • append(item) 在尾部添加一個節點
  • insert(pos, item) 在指定位置pos添加節點
  • remove(item) 刪除一個節點
  • search(item) 查找節點是否存在?
class SingLeLinkList(object):def __init__(self, node=None):self.__head = nodeif node:node.next=node def is_empty(self):"""判斷鏈表是否為空"""return self.__head == Nonedef length(self):"""返回鏈表的長度"""# 如果鏈表為空,返回長度0if self.is_empty():return 0count = 1cur = self._headwhile cur.next != self.__head:count += 1cur = cur.nextreturn countdef travel(self):"""遍歷鏈表"""if self.is_empty():returncur = self.__headprint cur.itemwhile cur.next != self.__head:print(cur.item, end=" ")cur = cur.nextprint(cur.item)

30.單向循環鏈表添加元素

def add(self, item):"""頭部添加節點"""node = Node(item)if self.is_empty():self.__head = nodenode.next = nodeelse:cur = self.__headwhile cur.next != self.__head:cur = cur.nextnode.next = self.__headself.__head = nodecur.next = self.__head def append(self, item):"""尾部添加節點"""node = Node(item)if self.is_empty():self.__head = nodenode.next = self.__headelse:# 移到鏈表尾部cur = self.__headwhile cur.next != self._head:cur = cur.next# 將尾節點指向nodecur.next = node# 將node指向頭節點_headnode.next = self.__head def insert(self, pos, item):"""在指定位置添加節點"""if pos <= 0:self.add(item)elif pos > (self.length()-1):self.append(item)else:node = Node(item)cur = self.__headcount = 0# 移動到指定位置的前一個位置while count < (pos-1):count += 1cur = cur.nextnode.next = cur.nextcur.next = node

31.單向循環鏈表刪除元素

def search(self, item):"""查找節點是否存在"""if self.is_empty():return Falsecur = self._headif cur.item == item:return Truewhile cur.next != self._head:cur = cur.nextif cur.item == item:return Truereturn False def remove(self, item):"""刪除一個節點"""if self.is_empty():returncur = self.__headpre = Nonewhile cur.next != self.__head:if cur.item == item:if cur == self.__head:rear = self.__headwhile rear.next != self.__head:rear = rear.nextself.__head = cur.nextrear.next =self.__headelse:pre.next = cur.nextreturnelse:pre = curcur = cur.nextif cur.item = item:if cur == self.__head:self.__head = Noneelse:pre.next = cur.next if __name__ =="__main__":ll =SingLeLinkList()print(ll.is_empty())print(ll.length())ll.append(2)ll.add(8)

32.單向循環鏈表刪除元素復習及鏈表擴展

回顧

總結

以上是生活随笔為你收集整理的Python数据结构与算法(第四天)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。