国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Python數據結構之雙鏈表

開發 后端
雙向鏈表也叫雙鏈表,是鏈表的一種,它的每個數據結點中都有兩個指針,分別指向直接后繼和直接前驅。所以,從雙向鏈表中的任意一個結點開始,都可以很方便地訪問它的前驅結點和后繼結點。

[[411390]]

本文轉載自微信公眾號「python與大數據分析」,作者一只小小鳥鳥。轉載本文請聯系python與大數據分析公眾號。

雙向鏈表也叫雙鏈表,是鏈表的一種,它的每個數據結點中都有兩個指針,分別指向直接后繼和直接前驅。所以,從雙向鏈表中的任意一個結點開始,都可以很方便地訪問它的前驅結點和后繼結點。

雙鏈表和單鏈表在查找和遍歷上沒什么區別,在新增節點、添加節點、刪除節點上需要注意前后節點的修改,比單鏈表會復雜一些,一不小心就繞暈了。

方法和單鏈表是一致的。

isempty(self) 鏈表是否為空

length(self) 鏈表長度

travel(self) 遍歷整個鏈表

add(self,item) 鏈表頭部添加元素

append(self,item) 鏈表尾部添加元素

insert(self,item,index) 指定位置添加元素

deletebyitem(self,item) 根據數據項刪除節點

deletebyindex(self,index) 根據索引位置刪除節點

search(self,item) 根據數據項查找節點是否存在

update(self,index,item) 暫無實現

getitem(self,index) 獲取索引位置對應的數據項

getindex(self,item) 獲取數據項對應的索引位置

如下:

  1. #!/usr/bin/env python 
  2. # -*- coding: UTF-8 -*- 
  3. #                     _ooOoo_ 
  4. #                   o8888888o 
  5. #                    88" . "88 
  6. #                 ( | -  _  - | ) 
  7. #                     O\ = /O 
  8. #                 ____/`---'\____ 
  9. #                  .' \\| |// `. 
  10. #                 / \\|||:|||// \ 
  11. #               / _|||||-:- |||||- \ 
  12. #                | | \\\ - /// | | 
  13. #              | \_| ''\---/'' | _/ | 
  14. #               \ .-\__ `-` ___/-. / 
  15. #            ___`. .' /--.--\ `. . __ 
  16. #         ."" '< `.___\_<|>_/___.' >'""
  17. #       | | : `- \`.;`\  _ /`;.`/ - ` : | | 
  18. #          \ \ `-. \_ __\ /__ _/ .-` / / 
  19. #      ==`-.____`-.___\_____/___.-`____.-'== 
  20. #                     `=---=' 
  21. ''
  22. @Project :pythonalgorithms  
  23. @File :doublelinklist.py 
  24. @Author :不勝人生一場醉 
  25. @Date :2021/7/13 23:00  
  26. ''
  27.  
  28.  
  29. class Node(object): 
  30.     def __init__(self, data): 
  31.         self.prev = None 
  32.         self.data = data 
  33.         self.next = None 
  34.  
  35.  
  36. class DoubleLinkList(object): 
  37.     def __init__(self): 
  38.         self.header = None 
  39.         self.currentnum = 0 
  40.  
  41.     def isempty(self): 
  42.         return self.header == None 
  43.  
  44.     def travel(self): 
  45.         tempnode = self.header 
  46.         while tempnode != None: 
  47.             print("{}".format(tempnode.data), end=" "
  48.             tempnode = tempnode.next 
  49.         print("\r"
  50.  
  51.     def add(self, item): 
  52.         node = Node(item) 
  53.         if self.isempty(): 
  54.             self.header = node 
  55.             self.currentnum += 1 
  56.             return 
  57.         node.next = self.header 
  58.         self.header.prev = node 
  59.         self.header = node 
  60.         self.currentnum += 1 
  61.  
  62.     def append(self, item): 
  63.         if self.isempty(): 
  64.             self.add(item) 
  65.             self.currentnum += 1 
  66.             return 
  67.         tempnode = self.header 
  68.         while tempnode.next is not None: 
  69.             tempnode = tempnode.next 
  70.         node = Node(item) 
  71.         node.prev = tempnode 
  72.         tempnode.next = node 
  73.         self.currentnum += 1 
  74.  
  75.     def length(self): 
  76.         length = 0 
  77.         tempnode = self.header 
  78.         while tempnode is not None: 
  79.             length += 1 
  80.             tempnode = tempnode.next 
  81.         return length 
  82.  
  83.     def search(self, item): 
  84.         tempnode = self.header 
  85.         while tempnode != None: 
  86.             if tempnode.data == item: 
  87.                 return True 
  88.             else
  89.                 tempnode = tempnode.next 
  90.         return False 
  91.  
  92.     def update(self, index, item): 
  93.         pass 
  94.  
  95.     def getitem(self, index): 
  96.         if index > self.currentnum or index <= 0: 
  97.             raise IndexError("{} is not find in Linklist".format(index)) 
  98.         tempnode = self.header 
  99.         i = 1 
  100.         while i < index
  101.             tempnode = tempnode.next 
  102.             i += 1 
  103.         if tempnode.next == None: 
  104.             return -1 
  105.         else
  106.             return tempnode.data 
  107.  
  108.     def getindex(self, item): 
  109.  
  110.         tempnode = self.header 
  111.         i = 0 
  112.         flag = False 
  113.         while tempnode != None: 
  114.             i += 1 
  115.             if tempnode.data == item: 
  116.                 flag = True 
  117.                 return i 
  118.             else
  119.                 tempnode = tempnode.next 
  120.         if flag == False
  121.             return 0 
  122.  
  123.     def insert(self, item, index): 
  124.         tempnode = self.header 
  125.         if index > self.currentnum + 1 or index <= 0: 
  126.             raise IndexError("{} is not find in Linklist".format(index)) 
  127.         # 指定位置為第一個即在頭部插入 
  128.  
  129.         if index == 1: 
  130.             self.add(item) 
  131.         elif index > self.currentnum - 1: 
  132.             self.append(item) 
  133.         else
  134.             node = Node(item) 
  135.             for i in range(1, index - 1): 
  136.                 tempnode = tempnode.next 
  137.             node.next = tempnode.next 
  138.             node.prev = tempnode 
  139.             tempnode.next.prev = node 
  140.             tempnode.next = node 
  141.         self.currentnum += 1 
  142.  
  143.     def deletebyitem(self, item): 
  144.         tempnode = self.header 
  145.         while tempnode != None: 
  146.             if tempnode.data == item: 
  147.                 self.currentnum -= 1 
  148.                 if tempnode == self.header: 
  149.                     self.header = self.header.next 
  150.                     if tempnode.next
  151.                         tempnode.next.prev = None 
  152.                     return 
  153.                 if tempnode.next is None: 
  154.                     tempnode.prev.next = tempnode.next 
  155.                     return 
  156.                 tempnode.prev.next = tempnode.next 
  157.                 tempnode.next.prev = tempnode.prev 
  158.                 return 
  159.             tempnode = tempnode.next 
  160.  
  161.     def deletebyindex(self, index): 
  162.  
  163.         if index > self.currentnum or index <= 0: 
  164.             raise IndexError("{} is not find in Linklist".format(index)) 
  165.  
  166.         i = 1 
  167.         tempnode = self.header 
  168.  
  169.         if index == 1: 
  170.             self.header = tempnode.next 
  171.             if tempnode.next
  172.                 tempnode.prev = None 
  173.             self.currentnum -= 1 
  174.             return 
  175.  
  176.         while tempnode.next and i < index
  177.             tempnode = tempnode.next 
  178.             i += 1 
  179.         if tempnode.next is None: 
  180.             tempnode.prev.next = tempnode.next 
  181.             self.currentnum -= 1 
  182.             return 
  183.         if i == index
  184.             tempnode.prev.next = tempnode.next 
  185.             tempnode.next.prev = tempnode.prev 
  186.             self.currentnum -= 1 
  187.  
  188.  
  189. if __name__ == '__main__'
  190.     a = DoubleLinkList() 
  191.     a.add(1)  # 1 
  192.     a.travel() 
  193.     a.add(2) 
  194.     a.travel() 
  195.     a.append(4) 
  196.     a.travel() 
  197.     a.append(3) 
  198.     a.travel() 
  199.     print(a.length()) 
  200.     print(a.search(1)) 
  201.     print(a.getindex(4)) 
  202.     print(a.getindex(5)) 
  203.     print(a.getitem(2)) 
  204.     # print(a.getitem(5)) 
  205.     # IndexError: 5 is not find in Linklist 
  206.     a.insert(5, 1) 
  207.     a.travel() 
  208.     a.insert(6, 5) 
  209.     a.travel() 
  210.     a.insert(7, 2) 
  211.     a.travel() 
  212.     a.deletebyitem(7) 
  213.     a.travel() 
  214.     a.deletebyitem(6) 
  215.     a.travel() 
  216.     a.deletebyitem(5) 
  217.     a.travel() 
  218.     a.deletebyindex(2) 
  219.     a.travel() 
  220.     a.deletebyindex(3) 
  221.     a.travel() 
  222.     a.deletebyindex(1) 
  223.     a.travel() 

調試了2、3個小時的bug,才跑通。

運行如下:

  1. C:\python\pyproject\pythonalgorithms\venv\Scripts\python.exe C:/python/pyproject/pythonalgorithms/doublelinklist.py 
  2. 1  
  3. 2 1  
  4. 2 1 4  
  5. 2 1 4 3  
  6. True 
  7. 5 2 1 4 3  
  8. 5 2 1 4 6 3  
  9. 5 7 2 1 4 6 3  
  10. 5 2 1 4 6 3  
  11. 5 2 1 4 3  
  12. 2 1 4 3  
  13. 2 4 3  
  14. 2 4  
  15. 4  
  16.  
  17. Process finished with exit code 0 

 

鏈表頭部增加節點示意圖

 

責任編輯:武曉燕 來源: python與大數據分析
相關推薦

2017-03-01 13:58:46

Python數據結構鏈表

2021-07-13 07:52:03

Python數據結構

2012-02-02 10:21:05

單鏈表nexthead

2021-08-03 10:24:59

數據跳躍鏈表結構

2021-05-12 14:09:35

鏈表數據結構線性結構

2021-04-12 15:47:00

數據結構算法鏈表

2021-07-16 07:57:34

Python數據結構

2021-12-21 08:19:29

數據結構算法鏈表相交

2021-01-06 08:03:00

JavaScript數據結構

2021-10-29 11:27:52

鏈表數據結構算法

2021-07-11 12:06:43

python數據結構

2021-01-28 07:33:34

JavaScript鏈表數據

2023-03-28 07:44:23

數據結構數組

2021-03-10 08:42:19

Java數據結構算法

2023-10-06 20:21:28

Python鏈表

2009-07-02 14:59:28

Java考研試題

2021-09-12 17:31:17

Python數據結構

2018-06-06 08:54:23

數據結構存儲

2024-10-11 16:43:05

高并發數據結構技巧

2022-01-18 19:13:52

背包問題數據結構算法
點贊
收藏

51CTO技術棧公眾號

特黄aaaaaaaaa毛片免费视频| 激情伦成人综合小说| jizz欧美大全| 玖玖视频精品| 欧美精品在线免费观看| 中文日本在线观看| 中文字幕日韩欧美一区二区三区| 日韩在线国产| 99精品在线| 午夜精品99久久免费| 日韩免费电影| 欧美一区二区三区四区久久| fc2人成共享视频在线观看| 北岛玲一区二区三区四区| 国内一区在线| 日本高清免费电影一区| 久久亚洲综合国产精品99麻豆精品福利 | 国产精品久久久久久影院8一贰佰| 最近的2019中文字幕免费一页| 欧美日韩在线看片| 亚洲国产sm捆绑调教视频| 午夜肉伦伦影院| 精东粉嫩av免费一区二区三区| 成人午夜电影在线播放| 国产精品自拍区| 久久久久久久久久久久久久久久久久av| 蜜桃视频在线观看播放| 日韩亚洲欧美在线| 日本激情在线观看| 欧美色老头old∨ideo| 在线免费黄色毛片| 亚洲精品成人天堂一二三| 在线观看亚洲色图| 亚洲国产精品高清| 成人小视频在线看| 91在线国产观看| 337p粉嫩大胆噜噜噜鲁| 99精品在线免费| 国产a级片免费观看| 91偷拍与自偷拍精品| 777精品久无码人妻蜜桃| 国产成a人亚洲| 成年人视频网站免费| 国产成人av电影在线播放| 久久手机在线视频| 国产91丝袜在线播放九色| 男人天堂a在线| 91色婷婷久久久久合中文| 日韩精品 欧美| 久久久www成人免费毛片麻豆| 大肉大捧一进一出好爽视频| 97久久精品人人做人人爽50路 | 激情深爱一区二区| 精品视频一区二区三区| 亚洲精品国偷自产在线99热| 日本性爱视频在线观看| 日韩高清免费观看| 成人做爰视频www网站小优视频| 亚洲精品自拍第一页| 色猫猫成人app| 久久久中精品2020中文| 国产精品免费99久久久| 成人在线视频福利| 视频在线在亚洲| 久久成人福利视频| ㊣最新国产の精品bt伙计久久| 一区二区三区高清在线视频 | 国产极品尤物在线| 国产精品欧美极品| 在线国产1区| 日韩三级在线免费观看| 麻豆久久久久| 国产免费一区二区三区香蕉精| 亚洲国内自拍| 丁香婷婷综合激情| 亚洲欧美综合另类在线卡通| 成人福利在线| 亚洲一二在线观看| 国产探花一区在线观看| 久久久水蜜桃| 久久精品网站免费观看| 国产视频在线看| 伊人伊成久久人综合网小说| 国产99久久久国产精品成人免费| 久久精品国产精品青草色艺| 成人高清伦理免费影院在线观看| 秋霞福利视频| 亚洲国产精品免费| 美女主播精品视频一二三四| 久久综合狠狠综合久久综青草| 久久亚洲一级片| 18视频免费网址在线观看| 日韩视频一区在线| 好吊视频一区二区三区四区| 日日摸日日碰夜夜爽无码| 欧美日韩黄色| 蜜桃久久精品乱码一区二区| 亚洲经典一区| 99热这里只有精品免费| 日本一区二区三区四区在线视频 | 日韩av在线网页| 国产三级电影在线播放| 高清欧美性猛交| 国产一区二区三区的电影| 精品久久久久av| 欧美一级精品在线| 久久成人高清| 久草视频国产在线| 欧美性猛交xxxx乱大交退制版 | 日本亚洲天堂| 亚洲精品福利在线| 日韩欧美视频| 欧美变态另类刺激| 7777精品久久久大香线蕉| 久久婷婷久久一区二区三区| 国产精品4hu.www| 成人午夜精品久久久久久久蜜臀| 亚洲国产成人爱av在线播放| 国产乱人伦精品一区二区在线观看| 亚洲国产精品久久久久秋霞蜜臀| 欧美卡1卡2卡| 日韩在线中文字幕| 欧美一区二区三区免费观看| 国产成人精品久久亚洲高清不卡| 精品丝袜一区二区三区| 88在线观看91蜜桃国自产| 影音先锋成人在线电影| 无人视频在线观看免费| 一区二区传媒有限公司| 日本888xxxx| 成年人在线播放| 97在线观看| 国产精品久久久久久亚洲调教| 亚洲电影第三页| 中文字幕精品一区| 国产精品a久久久久| gay视频丨vk| 亚洲欧美日韩一区在线| 高清在线观看日韩| 无人区在线高清完整免费版 一区二| 美女被啪啪一区二区| 欧美在线观看一区二区| 天堂成人国产精品一区| xxx性欧美| 日本免费在线视频观看| 成人国产精品av| 日韩限制级电影在线观看| 久久成人麻豆午夜电影| 色综合视频一区二区三区日韩 | 永久免费av在线| 欧美激情综合色| 99精品久久| 日本中文字幕高清| 亚洲大胆人体在线| 日本欧美一区| 欧美激情专区| 欧美中文字幕一二三区视频| 国产精品国产亚洲精品| 日本免费高清一区二区| 亚洲国产精品视频在线观看| 国产精品久久久久久妇女6080| 老司机久久99久久精品播放免费| 日本高清精品| 2021天堂中文幕一二区在线观| 在线高清av| 欧美高清视频手机在在线| 日韩精品一级中文字幕精品视频免费观看 | 久久免费视频网| 亚洲深夜福利网站| 精品久久久久一区| 一区二区在线免费| 国产精品一卡二卡| 久久久99精品免费观看不卡| 26uuu久久综合| 亚洲日本在线看| 3atv一区二区三区| 亚洲欧美日韩精品久久亚洲区| 精品久久久一区二区| 国产成人aaa| 欧美国产精品专区| 美腿丝袜亚洲综合| 亚洲精品黄色| 911精品美国片911久久久| 欧美一区=区三区| 爱情岛亚洲播放路线| 免费av网站在线观看| 天天激情综合| 成年男女免费视频网站不卡| 亚洲在线黄色| 三级不卡在线观看| 成人欧美一区二区三区小说| 亚洲一区二区在线免费观看视频 | 国产精品成人免费电影| 97超碰国产精品女人人人爽| 久久久精品免费视频| 日韩一本精品| 在线日韩av永久免费观看| 动漫美女被爆操久久久| 91精品久久久久久久久青青| 亚洲free性xxxx护士hd|