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

歡迎訪問 生活随笔!

生活随笔

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

python

Python数据结构与算法(五)--链表

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

鏈表

鏈表的定義:

鏈表(Linked list)是一種常見的基礎數據結構,是一種線性表,但是不像順序表一樣連續存儲數據,而是在每一個節點(數據存儲單元)里存放下一個節點的位置信息(即地址)。

單項鏈表

單向鏈表也叫單鏈表,是鏈表中最簡單的一種形式,它的每個節點包含兩個域,一個信息域(元素域)和一個鏈接域。這個鏈接指向鏈表中的下一個節點,而最后一個節點的鏈接域則指向一個空值。

  • 表元素域elem用來存放具體的數據。
  • 鏈接域next用來存放下一個節點的位置(python中的標識)
  • 變量p指向鏈表的頭節點(首節點)的位置,從p出發能找到表中的任意節點。
''' 單向鏈表單鏈表的操作 is_empty() 鏈表是否為空 length() 鏈表長度 travel() 遍歷整個鏈表 add(item) 鏈表頭部添加元素 append(item) 鏈表尾部添加元素 insert(pos, item) 指定位置添加元素 remove(item) 刪除節點 search(item) 查找節點是否存在'''class Node(object):'''單向鏈表的節點'''def __init__(self, item):self.elem = itemself.next = Noneclass SingleLinkList(object):'''單鏈表'''def __init__(self):self.__head = Nonedef is_empty(self):'''鏈表是否為空'''return self.__head == Nonedef length(self):'''鏈表長度'''cur = self.__headcount = 0while cur != None:cur = cur.nextcount += 1return countdef travel(self):'''遍歷整個鏈表'''cur = self.__headwhile cur != None:print(cur.elem, end=" ")cur = cur.nextprint("")def add(self, item):'''鏈表頭部添加元素'''node = Node(item)node.next = self.__headself.__head = nodedef append(self, item):'''鏈表尾部添加元素'''cur = self.__headnode = Node(item)if cur == None:self.__head = nodeelse:while cur.next != None:cur = cur.nextcur.next = nodedef insert(self, pos, item):'''指定位置添加元素'''if pos <= 0:self.add(item)elif pos > (self.length() - 1):self.append(item)else:pre = self.__headcount = 0while count < (pos - 1):count += 1pre = pre.nextnode = Node(item)node.next = pre.nextpre.next = nodedef remove(self, item):'''刪除節點'''cur = self.__headpre = Nonewhile cur != None:if cur.elem == item:# 判斷是否是第一if pre == None:self.__head = cur.nextelse:pre.next = cur.nextbreakelse:pre = curcur = cur.nextdef search(self, item):'''查找節點是否存在'''cur = self.__headwhile cur != None:if cur.elem == item:return Truecur = cur.nextreturn FalsesingList = SingleLinkList()singList.add("a") singList.add("b") singList.append("c") singList.append("d") singList.append("e") singList.append("f") singList.append("g")print(singList.is_empty()) print(singList.length()) singList.travel()print("search", singList.search(1))singList.remove("b")singList.travel()singList.insert(3, 3) singList.travel()

單向循環鏈表

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

''' 單循環鏈表 ''' class Node(object):'''單向鏈表的節點'''def __init__(self, item):self.elem = itemself.next = Noneclass SingleCircleLinkList(object):'''單循環鏈表'''def __init__(self, node = None):self.__head = nodeif node:node.next = nodedef is_empty(self):'''鏈表是否為空'''return self.__head == Nonedef length(self):'''鏈表長度'''cur = self.__headcount = 1while cur.next != self.__head:count += 1cur = cur.nextreturn countdef travel(self):'''遍歷整個鏈表'''cur = self.__headif cur == None:returnelse:while cur.next != self.__head:print(cur.elem, end=" ")cur = cur.nextprint(cur.elem)def add(self, item):'''鏈表頭部添加元素'''cur = self.__headnode = Node(item)if cur == None:self.__head = nodenode.next = nodeelse:while cur.next != self.__head:cur = cur.nextnode.next = cur.nextself.__head = nodecur.next = nodedef append(self, item):'''鏈表尾部添加元素'''cur = self.__headnode = Node(item)if cur == None:self.__head = nodenode.next = nodeelse:while cur.next != self.__head:cur = cur.nextcur.next = nodenode.next = self.__headdef insert(self, pos, item):'''指定位置添加元素'''if pos <= 0:self.add(item)elif pos > (self.length() - 1):self.append(item)else:count = 0cur = self.__headpre = Nonenode = Node(item)while count < pos:count += 1pre = curcur = cur.nextnode.next = curpre.next = nodedef remove(self, item):'''刪除節點''''''注意1、為空2、第一個節點的情況a) 列表只有一個節點b) 列表有多個節點3、在中間的情況'''if self.is_empty():return Nonecur = self.__headpre = Nonewhile cur.next != self.__head:if cur.elem == 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.next# 鏈表的最后一個元素if cur.elem == item:if pre == None:self.__head = Noneelse:pre.next = self.__headdef search(self, item):'''查找節點是否存在'''cur = self.__headif cur == None:return Falsewhile cur.next != self.__head:if cur.elem == item:return Truecur = cur.nextif cur.elem == item:return Truereturn Falsen = Node("1") sc = SingleCircleLinkList()sc.add("a") sc.add("b") sc.add("c") sc.add("d") sc.add("e") sc.add("f") sc.append("11") sc.insert(2, '22')sc.travel()sc.remove('f') sc.travel()

雙向鏈表

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

''' 雙向鏈表 '''class Node(object):'''節點'''def __init__(self, item):self.elem = itemself.prev = Noneself.next = Noneclass DoubleLinkList(object):'''雙向鏈表'''def __init__(self, node = None):self.__head = nodedef is_empty(self):'''鏈表是否為空'''return self.__head == Nonedef length(self):'''鏈表長度'''cur = self.__headcount = 0while cur != None:cur = cur.nextcount += 1return countdef travel(self):'''遍歷整個鏈表'''cur = self.__headwhile cur != None:print(cur.elem, end=" ")cur = cur.nextprint("")def add(self, item):'''鏈表頭部添加元素'''node = Node(item)if self.__head == None:self.__head = nodeelse:node.next = self.__headself.__head.prev = nodeself.__head = nodedef append(self, item):'''鏈表尾部添加元素'''node = Node(item)cur = self.__headif cur == None:self.__head = nodeelse:while cur.next != None:cur = cur.nextcur.next = nodenode.prev = curdef 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 = 0while count < pos:count += 1cur = cur.nextnode.next = curnode.prev = cur.prevcur.prev = nodenode.prev.next = nodedef 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.prevreturnelse:cur = cur.nextdef search(self, item):'''查找節點是否存在'''cur = self.__headwhile cur != None:if cur.elem == item:return Truecur = cur.nextreturn Falsedl = DoubleLinkList()print("is_empty = ", dl.is_empty()) print("length = ", dl.length()) dl.add("aa") dl.add("bb") dl.add("cc") dl.append("dd") dl.append("ee")dl.travel()# dl.remove("cc") dl.remove("bb") dl.remove('ee') dl.travel()# print(dl.search("1"))dl.insert(0, "00") dl.insert(2, '22')dl.travel()

?

總結

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

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