最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python代碼實(shí)現(xiàn)雙鏈表

 更新時(shí)間:2022年05月25日 09:03:34   作者:偉偉哦  
這篇文章主要為大家詳細(xì)介紹了Python代碼實(shí)現(xiàn)雙鏈表,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了Python代碼實(shí)現(xiàn)雙鏈表的具體代碼,供大家參考,具體內(nèi)容如下

雙鏈表的每個(gè)節(jié)點(diǎn)有兩個(gè)指針: 一個(gè)指向后一個(gè)節(jié)點(diǎn),另一個(gè)指向前一個(gè)節(jié)點(diǎn)

class Node(object):
?? ?def __init__(self, item=None):
?? ??? ?#放數(shù)據(jù)
?? ??? ?self.item= item
?? ??? ?#指向后一個(gè)節(jié)點(diǎn)
?? ??? ?self.next = None
?? ??? ?#指向前一個(gè)節(jié)點(diǎn)
?? ??? ?self.prior =None

此時(shí)當(dāng)前鏈表第一個(gè)節(jié)點(diǎn)就是頭節(jié)點(diǎn)指向的節(jié)點(diǎn) 20就是第一個(gè)節(jié)點(diǎn) 下圖
node.next = self.head 當(dāng)前節(jié)點(diǎn)指向原第一個(gè)節(jié)點(diǎn)

頭插法

如何插入呢

插入

p.next = curNode.next #指向后一個(gè)節(jié)點(diǎn)
curNode.next.prior = p #指向前一個(gè)節(jié)點(diǎn)

刪除

雙鏈表刪除

考慮特殊情況刪除的

正常刪除

雙鏈表刪除 30

#雙鏈表頭插法

#停在前一個(gè)位置了
count < (pos -1 )

#雙向鏈表 ?從左往右讀
class Node(object):
? ? ? ? """雙向鏈表節(jié)點(diǎn)"""
? ? ? ? def __init__(self,item):
? ? ? ? ? ? ? ? #放數(shù)據(jù)的節(jié)點(diǎn)
? ? ? ? ? ? ? ? self.elem = item
? ? ? ? ? ? ? ? #指向后一個(gè)節(jié)點(diǎn)
? ? ? ? ? ? ? ? self.next = None
? ? ? ? ? ? ? ? #指向前一個(gè)節(jié)點(diǎn)
? ? ? ? ? ? ? ? self.prev = None
#雙向鏈表
class LinkList(object):
? ? ? ? def __init__(self,node=None):
? ? ? ? ? ? ? ? #代表頭節(jié)點(diǎn)
? ? ? ? ? ? ? ? self.__head = node

? ? ? ? #判斷鏈表是否為空
? ? ? ? def is_empty(self):
? ? ? ? ? ? ? ? return self.__head == None

? ? ? ? def length(self):
? ? ? ? ? ? ? ? """返回鏈表的長(zhǎng)度"""
? ? ? ? ? ? ? ? #cur游標(biāo)移動(dòng),從而實(shí)現(xiàn)遍歷元素的功能
? ? ? ? ? ? ? ? cur = self.__head
? ? ? ? ? ? ? ? #count用來(lái)計(jì)數(shù)
? ? ? ? ? ? ? ? count = 0
? ? ? ? ? ? ? ? while cur != None:
? ? ? ? ? ? ? ? ? ? ? ? count += 1
? ? ? ? ? ? ? ? ? ? ? ? #讓cur游標(biāo)可以向下移動(dòng)
? ? ? ? ? ? ? ? ? ? ? ? cur = cur.next
? ? ? ? ? ? ? ? return count

? ? ? ? #遍歷整個(gè)鏈表
? ? ? ? def travel(self):
? ? ? ? ? ? ? ? if self.is_empty():
? ? ? ? ? ? ? ? ? ? ? ? return
? ? ? ? ? ? ? ? #建立游標(biāo)等于起始節(jié)點(diǎn)
? ? ? ? ? ? ? ? else:
? ? ? ? ? ? ? ? ? ? ? ? cur = self.__head
? ? ? ? ? ? ? ? ? ? ? ? while cur != None:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? print(cur.elem,end=" ")
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? cur = cur.next
? ? ? ? ? ? ? ? ? ? ? ? print("")

? ? ? ? #頭插法
? ? ? ? def add(self,item):
? ? ? ? ? ? ? ? #新節(jié)點(diǎn)
? ? ? ? ? ? ? ? node = Node(item)
? ? ? ? ? ? ? ? if self.is_empty():
? ? ? ? ? ? ? ? ? ? ? ? #頭節(jié)點(diǎn)指向了新的節(jié)點(diǎn)
? ? ? ? ? ? ? ? ? ? ? ? self.__head = node
? ? ? ? ? ? ? ? else:
? ? ? ? ? ? ? ? ? ? ? ? #新節(jié)點(diǎn)指向原第一個(gè)節(jié)點(diǎn)
? ? ? ? ? ? ? ? ? ? ? ? node.next = self.__head
? ? ? ? ? ? ? ? ? ? ? ? self.__head = node
? ? ? ? ? ? ? ? ? ? ? ? node.next.prev = node

? ? ? ? def append(self,item):
? ? ? ? ? ? ? ? """鏈表尾部添加元素"""
? ? ? ? ? ? ? ? node = Node(item) ?#定義新節(jié)點(diǎn)
? ? ? ? ? ? ? ? #鏈表是否為空鏈表
? ? ? ? ? ? ? ? if self.is_empty():
? ? ? ? ? ? ? ? ? ? ? ? #如果為空,新的節(jié)點(diǎn)加了進(jìn)去
? ? ? ? ? ? ? ? ? ? ? ? self.__head = node
? ? ? ? ? ? ? ? else:
? ? ? ? ? ? ? ? ? ? ? ? #頭節(jié)點(diǎn) 創(chuàng)建游標(biāo)
? ? ? ? ? ? ? ? ? ? ? ? cur = self.__head ? #設(shè)置指向頭結(jié)點(diǎn)的游標(biāo) ?此時(shí)的當(dāng)前鏈表第一個(gè)節(jié)點(diǎn),就是頭節(jié)點(diǎn)指向的節(jié)點(diǎn)
? ? ? ? ? ? ? ? ? ? ? ? #cur到最后一個(gè)節(jié)點(diǎn)停下
? ? ? ? ? ? ? ? ? ? ? ? while cur.next != None:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? cur = cur.next
? ? ? ? ? ? ? ? ? ? ? ? #添加節(jié)點(diǎn)到尾部 cur道了最后一個(gè)結(jié)點(diǎn) ?cur.next指向了新的節(jié)點(diǎn)node ?從左往右讀 ?
? ? ? ? ? ? ? ? ? ? ? ? cur.next = node
? ? ? ? ? ? ? ? ? ? ? ? #當(dāng)前的節(jié)點(diǎn)指向它前一個(gè)
? ? ? ? ? ? ? ? ? ? ? ? node.prev = cur

? ? ? ? #插入法 ?#pos從零開始
? ? ? ? def insert(self,pos,item):
? ? ? ? ? ? ? ? """在指定位置添加元素"""
? ? ? ? ? ? ? ? #指向不是頭部元素,self.__head的地址
? ? ? ? ? ? ? ? # 為下一個(gè)元素,所以pre為下一個(gè)元素
? ? ? ? ? ? ? ? if pos <= 0:
? ? ? ? ? ? ? ? ? ? ? ? #認(rèn)為是頭插法
? ? ? ? ? ? ? ? ? ? ? ? self.add(item)
? ? ? ? ? ? ? ? #假如長(zhǎng)度是3 pos大于2要特殊處理 ?
? ? ? ? ? ? ? ? elif pos > (self.length()-1):
? ? ? ? ? ? ? ? ? ? ? ? #尾插法
? ? ? ? ? ? ? ? ? ? ? ? self.append(item)
? ? ? ? ? ? ? ? else:
? ? ? ? ? ? ? ? ?? ??? ?#創(chuàng)建節(jié)點(diǎn) 新節(jié)點(diǎn)
? ? ? ? ? ? ? ? ? ? ? ? node = Node(item)
? ? ? ? ? ? ? ? ? ? ? ? cur = self.__head
? ? ? ? ? ? ? ? ? ? ? ? count = 0
? ? ? ? ? ? ? ? ? ? ? ? #動(dòng)起來(lái)
? ? ? ? ? ? ? ? ? ? ? ? while count < pos:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? count+=1
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? cur = cur.next
? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? #把節(jié)點(diǎn)鏈接到中間任意位置 插入前一個(gè)節(jié)點(diǎn) ? 此時(shí),cur停在后一個(gè)節(jié)點(diǎn)
? ? ? ? ? ? ? ? ? ? ? ? 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
? ? ? ? ? ? ? ? #查找所有的位置有沒有要?jiǎng)h除的,若有則刪除
? ? ? ? ? ? ? ? while cur != None:
? ? ? ? ? ? ? ? ?? ??? ?#判斷cur指向的數(shù)據(jù),是否為要?jiǎng)h除的數(shù)據(jù) ? item要?jiǎng)h除的元素
? ? ? ? ? ? ? ? ? ? ? ? if cur.elem == item:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #判斷此節(jié)點(diǎn)是否為頭節(jié)點(diǎn)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #考慮特殊情況,恰好要?jiǎng)h除是第一個(gè)元素 ? ?當(dāng)前的元素就是我要?jiǎng)h除的元素?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if cur == self.__head:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #如果刪除中間, ?頭節(jié)點(diǎn)指向后一個(gè)節(jié)點(diǎn)?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? self.__head = cur.next
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #考慮鏈表只有一個(gè)節(jié)點(diǎn) ?直接指向None
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if cur.next != None:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #是否只有一個(gè)節(jié)點(diǎn)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? cur.next.prev = None
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? else:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #中間節(jié)點(diǎn)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? cur.prev.next = cur.next
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if cur.next != None:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? cur.next.prev = cur.prev
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? break
? ? ? ? ? ? ? ? ? ? ? ? else:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #沒有找到,cur游標(biāo)向繼續(xù)往下移動(dòng)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? cur = cur.next

? ? ? ? def search(self,item):
? ? ? ? ? ? ? ? """查找結(jié)點(diǎn)是否存在"""
? ? ? ? ? ? ? ? #如果是一個(gè)空鏈表
? ? ? ? ? ? ? ? if self.is_empty():
? ? ? ? ? ? ? ? ? ? ? ? return False
? ? ? ? ? ? ? ? cur = self.__head
? ? ? ? ? ? ? ? while cur.next != self.__head:
? ? ? ? ? ? ? ? ? ? ? ? #cur數(shù)據(jù)是否為查找的數(shù)據(jù) item是要查的數(shù)據(jù)?
? ? ? ? ? ? ? ? ? ? ? ? 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()

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python發(fā)送email的3種方法

    Python發(fā)送email的3種方法

    這篇文章主要介紹了Python發(fā)送email的3種方法,本文講解了使用登錄郵件服務(wù)器方法、調(diào)用sendmail命令、使用smtp服務(wù)來(lái)發(fā)送三種方法,需要的朋友可以參考下
    2015-04-04
  • 基于python的漢字轉(zhuǎn)GBK碼實(shí)現(xiàn)代碼

    基于python的漢字轉(zhuǎn)GBK碼實(shí)現(xiàn)代碼

    今天想用python調(diào)用百度框計(jì)算的搜過結(jié)果,看到了URL里面的漢字用GBK編碼,雖然可以直接在URL里面加入中文,之前也做過一個(gè)簡(jiǎn)體字轉(zhuǎn)GBK碼的python函數(shù),但還是略嫌麻煩,今天改了一下
    2012-02-02
  • Python小白垃圾回收機(jī)制入門

    Python小白垃圾回收機(jī)制入門

    在本篇文章里小編給大家分享的是關(guān)于Python小白垃圾回收機(jī)制入門的相關(guān)知識(shí)點(diǎn),需要的朋友們可以參考下。
    2020-06-06
  • Python實(shí)戰(zhàn)項(xiàng)目用PyQt5制作漫畫臉GUI界面

    Python實(shí)戰(zhàn)項(xiàng)目用PyQt5制作漫畫臉GUI界面

    PyQt5 是用來(lái)創(chuàng)建Python GUI應(yīng)用程序的工具包。作為一個(gè)跨平臺(tái)的工具包,PyQt可以在所有主流操作系統(tǒng)上運(yùn)行,本文主要介紹了如何用PyQt5制作漫畫臉的GUI界面
    2021-10-10
  • Python實(shí)現(xiàn)階乘的四種寫法

    Python實(shí)現(xiàn)階乘的四種寫法

    本文主要介紹了Python實(shí)現(xiàn)階乘的六種寫法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-01-01
  • 淺析AST抽象語(yǔ)法樹及Python代碼實(shí)現(xiàn)

    淺析AST抽象語(yǔ)法樹及Python代碼實(shí)現(xiàn)

    Abstract Syntax Tree抽象語(yǔ)法樹簡(jiǎn)寫為ATS,是相當(dāng)于用樹結(jié)構(gòu)將代碼程式表現(xiàn)出來(lái)的一種數(shù)據(jù)結(jié)構(gòu),這里我們就來(lái)淺析AST抽象語(yǔ)法樹及Python代碼實(shí)現(xiàn)
    2016-06-06
  • python 利用 PIL 將數(shù)組值轉(zhuǎn)成圖片的實(shí)現(xiàn)

    python 利用 PIL 將數(shù)組值轉(zhuǎn)成圖片的實(shí)現(xiàn)

    這篇文章主要介紹了python 利用 PIL 將數(shù)組值轉(zhuǎn)成圖片的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Python+樹莓派+YOLO打造一款人工智能照相機(jī)

    Python+樹莓派+YOLO打造一款人工智能照相機(jī)

    今天,我們將自己動(dòng)手打造出一款基于深度學(xué)習(xí)的照相機(jī),當(dāng)小鳥出現(xiàn)在攝像頭畫面中時(shí),它將能檢測(cè)到小鳥并自動(dòng)進(jìn)行拍照
    2018-01-01
  • Python 獲取新浪微博的最新公共微博實(shí)例分享

    Python 獲取新浪微博的最新公共微博實(shí)例分享

    因?yàn)楣ぷ?,需要抓取微博?nèi)容。在百度上找到多篇關(guān)于用Python實(shí)現(xiàn)抓取新浪微博的文章,但似乎都不湊效,還是自己來(lái)吧,俗話說自己動(dòng)手豐衣足食嘛
    2014-07-07
  • 教你用Python寫安卓游戲外掛

    教你用Python寫安卓游戲外掛

    本篇文章主要給教給大家如何用python這個(gè)語(yǔ)言寫出安卓游戲的輔助外掛以及思路講解,有興趣的朋友跟著學(xué)習(xí)下吧。
    2018-01-01

最新評(píng)論

嫩江县| 剑阁县| 九龙县| 马山县| 珲春市| 闻喜县| 孝感市| 怀远县| 镶黄旗| 博爱县| 通许县| 游戏| 延川县| 浦北县| 应用必备| 镇康县| 灵璧县| 怀集县| 财经| 浙江省| 云安县| 马边| 清远市| 仪陇县| 拉萨市| 阳城县| 项城市| 武安市| 武乡县| 定州市| 勃利县| 亚东县| 西乌珠穆沁旗| 郎溪县| 五指山市| 新巴尔虎左旗| 内丘县| 西宁市| 三亚市| 金乡县| 安丘市|