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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

列表的实现与应用

發布時間:2025/10/17 编程问答 10 豆豆
生活随笔 收集整理的這篇文章主要介紹了 列表的实现与应用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

抽象數據結構list

  • python內置實現了list;但list是一種通用數據結構,類似于c++中的vector
  • 下面使用鏈表來實現list;python內置list使用數組(array.Array模塊)來實現

list的數據結構和操作方法如下:

一、實現(基于鏈表)

由于實現方式不同,該實現方式的各種操作時間復雜度不同于內置list

  • 方法1:內置list(基于數組實現)
  • 方法2:基于鏈表
1.1 無序list
class Node():"""鏈表中的節點,包括數據域和指針域;使用單鏈表實現"""def __init__(self, data):self.data = dataself.next = Nonedef get_data(self):return self.datadef set_next(self, next_node):#python內變量為引用類型,可視作指針self.next = next_nodedef get_next(self):return self.nextclass UnOrderedList():"""無序列表的實現"""def __init__(self):"""構造函數創建一個空list空的單鏈表等價于頭部為空;根據頭部可以遍歷出所有所有鏈表信息故list只存儲頭部節點即可"""#頭部節點初始為Noneself.head = Nonedef add(self, item):"""在鏈表head添加元素"""temp_node = Node(item)temp_node.set_next(self.head)self.head = temp_nodedef isEmpty(self):return self.head == Nonedef size(self):#排除特殊情況count = 0node = self.headwhile node != None:count += 1node = node.get_next()return countdef search(self, item):found = Falsecurrent = self.headwhile current != None and not found:if current.get_data() == item:#found相當于指示器,相當于breakfound = Trueelse:current = current.get_next()return founddef remove(self, item):"""1、找到則刪除,未找到不做任何操作2、刪除節點關鍵是定位相鄰節點;左節點可以用previous表示,右節點用current.get_next()表示3、所以兩個變量previous與current至關重要4、刪除頭結點要分類討論"""found = Falsecurrent = self.headprevious = Nonewhile current != None and not found:if current.get_data() == item:#found相當于指示器,相當于breakfound = True#previous為None:刪除頭結點if previous == None:self.head = current.get_next()else:previous.set_next(current.get_next())else:previous = currentcurrent = current.get_next()def append(self, item):"""追加操作,鏈表首都append需要分類討論"""current = self.headif current == None:self.head = Node(item)else:current = self.head#尋找鏈表最后一個元素while current.get_next() is not None:current = current.get_next() current.set_next(Node(item))def insert(self, pos, item):"""插入操作,鏈表首都append需要分類討論"""if pos == 0:inserted_node = Node(item)inserted_node.set_next(self.head)self.head = inserted_nodeelif 0 < pos <=self.size() :#找到pos位置對應的當前元素current與前置元素previouscurrent = self.headprevious = Nonecount = 0while count < pos:previous = currentcurrent = current.get_next()count += 1inserted_node = Node(item)inserted_node.set_next(current)previous.set_next(inserted_node)def index(self, item):myindex = 0current = self.headif self.size():#非空執行操作,空list不做任何操作count = 0while current.get_data() != item:count += 1current = current.get_next()return countdef pop(self, pos=None):"""pop操作,鏈表首都pop需要分類討論"""#對于缺省值的處理if pos is None:pos = self.size() - 1 if pos == 0:self.head = self.head.get_next()return self.headelif 0 < pos < self.size():current = self.headprevious = Nonecount = 0while count != pos:previous = currentcurrent = current.get_next()count += 1previous.set_next(current.get_next())return currentif __name__ == '__main__':mylist = UnOrderedList()mylist.add(31)mylist.add(77)mylist.add(17)mylist.add(93)mylist.add(26)mylist.add(54)print(mylist.size())print(mylist.search(93))print(mylist.search(100))mylist.add(100)print(mylist.search(100))print(mylist.size())print('*'*50)mylist.remove(54)print(mylist.size())mylist.remove(93)print(mylist.size())mylist.remove(31)print(mylist.size())mylist.remove(11)print(mylist.size())print(mylist.search(93))print(mylist.append(66))print(mylist.size())print(mylist.pop(0))print(mylist.pop())print(mylist.index(17))print(mylist.insert(0, 333))print(mylist.insert(1, 444))print(mylist.index(333))print(mylist.index(444))

用單向鏈表實現的list各操作復雜度為:

  • append O(n)
  • pop O(n)
  • pop(k) O(k)
  • add O(1)
  • isEmpty O(1)
  • size O(n)
  • index O(n)
  • insert(k) O(k)
  • remove O(n)

對比使用數組實現的內置list,有一定性能差距

1.2 有序list

數據結構相同,部分操作方法要做對應修改

class Node():"""鏈表中的節點,包括數據域和指針域;使用單鏈表實現"""def __init__(self, data):self.data = dataself.next = Nonedef get_data(self):return self.datadef set_next(self, next_node):#python內變量為引用類型,可視作指針self.next = next_nodedef get_next(self):return self.nextclass OrderedList():"""有序列表"""def __init__(self):self.head = Nonedef isEmpty(self):return self.head == Nonedef size(self):#排除特殊情況count = 0node = self.headwhile node != None:count += 1node = node.get_next()return countdef remove(self, item):"""1、找到則刪除,未找到不做任何操作2、刪除節點關鍵是定位相鄰節點;左節點可以用previous表示,右節點用current.get_next()表示3、所以兩個變量previous與current至關重要4、刪除頭結點要分類討論"""found = Falsecurrent = self.headprevious = Nonewhile current != None and not found:if current.get_data() == item:#found相當于指示器,相當于breakfound = True#previous為None:刪除頭結點if previous == None:self.head = current.get_next()else:previous.set_next(current.get_next())else:previous = currentcurrent = current.get_next()def search(self, item):current = self.head#trigger1found = False #trigger2stop = False#current is not None既表示當前列表非空,也是判斷條件:遍歷到了list末尾;雙關while current is not None and not found and not stop:if item == current.get_data():#找到目標值,觸發trigger1,退出循環found = Trueelse:if item < current.get_data():#由于list順序排列,一旦當前考察值大于目標值,觸發trigger2,退出循環stop = Falseelse: #自增項;只有當前值小于目標值才自增current = current.get_next()return founddef add(self, item):#1、找到合適位置,記錄在current、previous中current = self.headprevious = Nonestop = Falsewhile current is not None and not stop:if current.get_data() > item:stop = Trueelse:#只有trigger:stop未觸發情況下才自增previous = currentcurrent = current.get_next()temp_node = Node(item)if current == self.head:temp_node.set_next(current)self.head = temp_nodeelse:temp_node.set_next(current)previous.set_next(temp_node)if __name__ == '__main__':mylist = OrderedList()mylist.add(31)mylist.add(77)mylist.add(17)mylist.add(93)mylist.add(26)mylist.add(54)print(mylist.size())print(mylist.search(93))print(mylist.search(100))

二、參考鏈接

http://interactivepython.org/runestone/static/pythonds/BasicDS/ImplementinganOrderedList.html

總結

以上是生活随笔為你收集整理的列表的实现与应用的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 久草成人网 | 欧美日韩在线免费视频 | 狠狠干亚洲色图 | 欧美日一区二区三区 | 国产一区午夜 | 成人动漫在线观看免费 | 综合色天天 | 97干在线视频 | 一本色道久久综合狠狠躁 | 亚洲精品www久久久久久广东 | free性欧美69巨大 | 精品熟妇无码av免费久久 | 狼人伊人久久 | 精品一区二区欧美 | 人人人草| 韩国久久久久 | 久久无码人妻精品一区二区三区 | 精品无码黑人又粗又大又长 | 精品乱码久久久久久中文字幕 | 91麻豆精品国产91久久久无需广告 | 小视频在线免费观看 | 午夜色综合 | 他趴在我两腿中间添得好爽在线看 | 亚洲欧美第一页 | 国产一区二区三区视频播放 | 口舌奴vk | 国精产品一区一区三区 | 日韩欧美在线视频 | 少妇扒开粉嫩小泬视频 | 成人av自拍| 一本大道视频 | 视频在线a| 日韩高清黄色 | 强伦人妻一区二区三区 | 黄色免费一级片 | 三上悠亚 电影 | 亚洲在线视频免费观看 | 91.xxx.高清在线| 久久特黄| 国产综合视频在线 | 久久亚洲日本 | 日韩无砖 | 小早川怜子久久精品中文字幕 | 日本三级生活片 | 四虎最新网址在线观看 | 白浆一区 | 青娱乐激情| 91精品国产aⅴ一区二区 | 人妻激情偷乱视频一区二区三区 | 91在线超碰 | 天天射天天搞 | 亚洲成人av电影网站 | 香蕉av一区 | 又紧又大又爽精品一区二区 | 天天躁日日躁aaaa视频 | 免费在线h | 蜜臀av性久久久久蜜臀aⅴ | av免费在线电影 | 校园春色综合 | 午夜精品久久久久久久久久久久久 | 免费在线黄色片 | 99涩涩| 久久综合88| 日日噜噜噜 | 18禁免费观看网站 | 国产精品视频入口 | 亚洲国产精品无码久久久久高潮 | 蜜桃视频中文字幕 | 日韩av免费在线 | 天天搞天天| 善良的女邻居在线观看 | 精品欧美久久 | 国产成人精品一区二区三区免费 | 成长快手短视频在线观看 | 91国产一区二区 | 91视频最新地址 | 人妻 校园 激情 另类 | 欧美aaaaa| 国产成人免费在线 | 欧美日韩一区二 | 18一20岁毛毛片 | 精品国产一二三 | 国产成人欧美一区二区三区91 | 亚洲免费网址 | 成人刺激视频 | 亚洲精品视频播放 | 好男人香蕉影院 | 美女啪啪网 | 国产精品免费av一区二区 | 久久免费偷拍视频 | 国产又粗又猛又爽又黄av | 婷婷综合在线观看 | 亚洲黄色免费网站 | 1024久久| 国产精品视频一二三区 | 亚洲爱爱视频 | 日韩男人天堂 | 国产睡熟迷奷系列精品视频 | 久久99精品国产91久久来源 |