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

Python實(shí)現(xiàn)雙向鏈表基本操作

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

雙向鏈表的基本操作的實(shí)現(xiàn),供大家參考,具體內(nèi)容如下

在之前的博客中介紹了三種鏈表,分別是單鏈表、單向循環(huán)鏈表以及雙向鏈表。本篇博客將用Python來(lái)實(shí)現(xiàn)雙向鏈表的如下操作。(用到的工具是Python 3)

is_empty() : 判斷鏈表是否為空
length() : 返回鏈表的長(zhǎng)度
travel() : 遍歷
add(item) : 在頭部添加一個(gè)節(jié)點(diǎn)
append(item) : 在尾部添加一個(gè)節(jié)點(diǎn)
insert(pos, item) : 在指定位置 pos 添加一個(gè)節(jié)點(diǎn)
remove(item) :  刪除一個(gè)節(jié)點(diǎn)
search(item) :  查找節(jié)點(diǎn)是否存在

Python實(shí)現(xiàn)

class Node(object):
?? ?'''雙向鏈表節(jié)點(diǎn)'''
?? ?def __init__(self,item):
?? ??? ?self.item = item
?? ??? ?self.next = None
?? ??? ?self.prev = None
class DoubleLink(object):
?? ?'''雙向鏈表'''
?? ?def __init__(self):
?? ??? ?self._head = None
?? ?
?? ?def is_empty(self):
?? ??? ?'''判斷是否為空'''
?? ??? ?return self._head == None
?? ?
?? ?def length(self):
?? ??? ?'''返回鏈表的長(zhǎng)度'''
?? ??? ?cur = self._head
?? ??? ?count = 0
?? ??? ?while cur!= None:
?? ??? ??? ?count += 1
?? ??? ??? ?cur = cur.next
?? ??? ?return count
?? ?
?? ?def travel(self):
?? ??? ?'''遍歷鏈表'''
?? ??? ?cur = self._head
?? ??? ?while cur != None:
?? ??? ??? ?print(cur.item)
?? ??? ??? ?cur = cur.next
?? ??? ?print("")
?? ?
?? ?def add(self, item):
?? ??? ?'''頭部插入元素'''
?? ??? ?node = Node(item)
?? ??? ?if self.is_empty():
?? ??? ??? ?# 如果是空鏈表,將_head指向None
?? ??? ??? ?self._head = node
?? ??? ?else:
?? ??? ??? ?# 將node的next指向_head的頭節(jié)點(diǎn)
?? ??? ??? ?node.next = self._head
?? ??? ??? ?# 將_head的頭節(jié)點(diǎn)的prev指向node
?? ??? ??? ?self._head.prev = node
?? ??? ??? ?# 將_head 指向node
?? ??? ??? ?self._head = node
?? ?
?? ?def append(self, item):
?? ??? ?'''尾部插入元素'''
?? ??? ?node = Node(item)
?? ??? ?if self.is_empty():
?? ??? ??? ?self._head = node
?? ??? ?else:
?? ??? ??? ?# 移動(dòng)到鏈表尾部
?? ??? ??? ?cur = self._head
?? ??? ??? ?while cur.next != None:
?? ??? ??? ??? ?cur = cur.next
?? ??? ??? ?# 將尾結(jié)點(diǎn)cur的next指向node
?? ??? ??? ?cur.next = node
?? ??? ??? ?# 將node的prev指向cur
?? ??? ??? ?node.prev = cur
?? ?
?? ?def search(self, item):
?? ??? ?'''查找元素是否存在'''
?? ??? ?cur = self._head
?? ??? ?while cur != None:
?? ??? ??? ?if cur.item == item:
?? ??? ??? ??? ?return True
?? ??? ??? ?cur = cur.next
?? ??? ?return False

指定位置插入節(jié)點(diǎn)

在該操作中,要注意鏈的指向的先后順序。

def insert(self, pos, item):
?? ??? ?'''在指定位置添加節(jié)點(diǎn)'''
?? ??? ?if pos <= 0:
?? ??? ??? ?self.add(item)
?? ??? ?elif pos > (self.length() - 1):
?? ??? ??? ?self.append(item)
?? ??? ?else:
?? ??? ??? ?node = Node()
?? ??? ??? ?cur = self._head()
?? ??? ??? ?count = 0
?? ??? ??? ?# 移動(dòng)到指定的前一個(gè)位置
?? ??? ??? ?while cur < pos - 1 :
?? ??? ??? ??? ?count += 1
?? ??? ??? ??? ?cur = cur.next
?? ??? ??? ?# 將node的prev指向cur
?? ??? ??? ?node.prev = cur
?? ??? ??? ?# 將node的next指向cur的下一個(gè)節(jié)點(diǎn)
?? ??? ??? ?node.next = cur.next
?? ??? ??? ?# 將cur的下一個(gè)節(jié)點(diǎn)的prev指向node
?? ??? ??? ?cur.next.prev = node
?? ??? ??? ?# 將cur.next指向node
?? ??? ??? ?cur.next = node

刪除元素

def remove(self, item):
?? ??? ?'''刪除元素'''
?? ??? ?if self.is_empty(): return?
?? ??? ?else:
?? ??? ??? ?cur = self._head
?? ??? ??? ?if cur.item == item:
?? ??? ??? ??? ?# 如果首節(jié)點(diǎn)的元素是要?jiǎng)h除的元素
?? ??? ??? ??? ?if cur.next == None:
?? ??? ??? ??? ??? ?# 如果鏈表中只有一個(gè)節(jié)點(diǎn)
?? ??? ??? ??? ??? ?self._head = None
?? ??? ??? ??? ?else:
?? ??? ??? ??? ??? ?cur.next.prev = None
?? ??? ??? ??? ??? ?self._head = cur.next
?? ??? ??? ??? ?return
?? ??? ??? ?while cur != None:
?? ??? ??? ??? ?if cur.item == item:
?? ??? ??? ??? ??? ?cur.prev.next = cur.next
?? ??? ??? ??? ??? ?cur.next.prev = cur.prev
?? ??? ??? ??? ??? ?break
?? ??? ??? ??? ?cur = cur.next

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

相關(guān)文章

  • 使用Python腳本來(lái)控制Windows Azure的簡(jiǎn)單教程

    使用Python腳本來(lái)控制Windows Azure的簡(jiǎn)單教程

    這篇文章主要介紹了使用Python腳本來(lái)控制Windows Azure的簡(jiǎn)單教程,由于微軟官方提供了Python SDK,使得用戶自己用Python控制Azure成為了可能,需要的朋友可以參考下
    2015-04-04
  • Pandas時(shí)間序列:時(shí)期(period)及其算術(shù)運(yùn)算詳解

    Pandas時(shí)間序列:時(shí)期(period)及其算術(shù)運(yùn)算詳解

    今天小編就為大家分享一篇Pandas時(shí)間序列:時(shí)期(period)及其算術(shù)運(yùn)算詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-02
  • wxPython中文教程入門(mén)實(shí)例

    wxPython中文教程入門(mén)實(shí)例

    這篇文章主要為大家分享下python編程中有關(guān)wxPython的中文教程,分享一些wxPython入門(mén)實(shí)例,有需要的朋友參考下
    2014-06-06
  • Python 自動(dòng)喚醒窗口截圖腳本

    Python 自動(dòng)喚醒窗口截圖腳本

    截圖的操作用途最為廣泛,你可以用它配合定時(shí)工具,定時(shí)檢測(cè)某個(gè)程序的運(yùn)行情況,本文給大家講下如何使用 win32api 實(shí)現(xiàn)自動(dòng)喚醒并截圖的操作,對(duì)Python窗口截圖腳本知識(shí)感興趣的朋友跟隨小編一起看看吧
    2022-02-02
  • Python實(shí)現(xiàn)一個(gè)自助取數(shù)查詢工具

    Python實(shí)現(xiàn)一個(gè)自助取數(shù)查詢工具

    在數(shù)據(jù)生產(chǎn)應(yīng)用部門(mén),取數(shù)分析是一個(gè)很常見(jiàn)的需求,實(shí)際上業(yè)務(wù)人員需求時(shí)刻變化,最高效的方式是讓業(yè)務(wù)部門(mén)自己來(lái)取,減少不必要的重復(fù)勞動(dòng),本文介紹如何用Python實(shí)現(xiàn)一個(gè)自助取數(shù)查詢工具
    2021-06-06
  • 在Python中居然可以定義兩個(gè)同名通參數(shù)的函數(shù)

    在Python中居然可以定義兩個(gè)同名通參數(shù)的函數(shù)

    今天小編就為大家分享一篇在Python中居然可以定義兩個(gè)同名通參數(shù)的函數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • Flask解決跨域的問(wèn)題示例代碼

    Flask解決跨域的問(wèn)題示例代碼

    這篇文章主要介紹了Flask解決跨域的問(wèn)題示例代碼,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • python實(shí)現(xiàn)復(fù)制文件到指定目錄

    python實(shí)現(xiàn)復(fù)制文件到指定目錄

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)復(fù)制文件到指定的目錄下,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • python 自動(dòng)化辦公之批量修改文件名實(shí)操

    python 自動(dòng)化辦公之批量修改文件名實(shí)操

    這篇文章主要介紹了python 自動(dòng)化辦公之批量修改文件名實(shí)操,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-07-07
  • 使用Python和GDAL給圖片加坐標(biāo)系的實(shí)現(xiàn)思路(坐標(biāo)投影轉(zhuǎn)換)

    使用Python和GDAL給圖片加坐標(biāo)系的實(shí)現(xiàn)思路(坐標(biāo)投影轉(zhuǎn)換)

    這篇文章主要介紹了使用Python和GDAL給圖片加坐標(biāo)系的實(shí)現(xiàn)思路(坐標(biāo)投影轉(zhuǎn)換),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03

最新評(píng)論

宜丰县| 丁青县| 察雅县| 九江县| 宣武区| 荃湾区| 蕉岭县| 安达市| 新泰市| 鄂温| 永新县| 合川市| 高唐县| 武城县| 虹口区| 抚远县| 凌源市| 怀仁县| 镇沅| 甘孜| 罗城| 阳高县| 台东市| 宾川县| 同德县| 剑河县| 成都市| 江永县| 定兴县| 泽州县| 项城市| 尼勒克县| 五峰| 松滋市| 阿坝县| 长丰县| 德令哈市| 怀化市| 永昌县| 全椒县| 馆陶县|