欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python實(shí)現(xiàn)雙向鏈表原理

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

雙向鏈表

一種更復(fù)雜的鏈表是“雙向鏈表”或“雙面鏈表”。每個(gè)節(jié)點(diǎn)有兩個(gè)鏈接:一個(gè)指向前一個(gè)節(jié)點(diǎn),當(dāng)此節(jié)點(diǎn)為第一個(gè)節(jié)點(diǎn)時(shí),指向空值;而另一個(gè)指向下一個(gè)節(jié)點(diǎn),當(dāng)此節(jié)點(diǎn)為最后一個(gè)節(jié)點(diǎn)時(shí),指向空值。

操作

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

實(shí)現(xiàn)

class Node(object):
? ? """雙向鏈表節(jié)點(diǎn)"""
? ? def __init__(self, item):
? ? ? ? self.item = item
? ? ? ? self.next = None
? ? ? ? self.prev = None


class DLinkList(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指向node
? ? ? ? ? ? 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():
? ? ? ? ? ? # 如果是空鏈表,將_head指向node
? ? ? ? ? ? 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(item)
? ? ? ? ? ? cur = self.__head
? ? ? ? ? ? count = 0
? ? ? ? ? ? # 移動(dòng)到指定位置的前一個(gè)位置
? ? ? ? ? ? while count < (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):
? ? ? ? """刪除元素"""
? ? ? ? cur = self.__head
? ? ? ? while cur != None:
? ? ? ? ? ? # 找到了要?jiǎng)h除的元素
? ? ? ? ? ? if cur.item == item:
? ? ? ? ? ? ? ? # 先判斷此結(jié)點(diǎn)是否是頭節(jié)點(diǎn)
? ? ? ? ? ? ? ? # 頭節(jié)點(diǎn)
? ? ? ? ? ? ? ? if cur == self.__head:
? ? ? ? ? ? ? ? ? ? self.__head = cur.next
? ? ? ? ? ? ? ? ? ? # 如果存在下一個(gè)結(jié)點(diǎn),則設(shè)置下一個(gè)結(jié)點(diǎn)
? ? ? ? ? ? ? ? ? ? if cur.next:
? ? ? ? ? ? ? ? ? ? ? ? # 判斷鏈表是否只有一個(gè)結(jié)點(diǎn)
? ? ? ? ? ? ? ? ? ? ? ? cur.next.prev = None
? ? ? ? ? ? ? ? else:
? ? ? ? ? ? ? ? ? ? cur.prev.next = cur.next
? ? ? ? ? ? ? ? ? ? # 如果存在下一個(gè)結(jié)點(diǎn),則設(shè)置下一個(gè)結(jié)點(diǎn)
? ? ? ? ? ? ? ? ? ? if cur.next:
? ? ? ? ? ? ? ? ? ? ? ? cur.next.prev = cur.prev
? ? ? ? ? ? ? ? break
? ? ? ? ? ? else:
? ? ? ? ? ? ? ? cur = cur.next

測(cè)試

if __name__ == "__main__":
? ? ll = DLinkList()
? ? ll.add(1)
? ? ll.add(2)
? ? ll.append(3)
? ? ll.insert(2, 4)
? ? ll.insert(4, 5)
? ? ll.insert(0, 6)
? ? print "length:",ll.length()
? ? ll.travel()
? ? print ll.search(3)
? ? print ll.search(4)
? ? ll.remove(1)
? ? print "length:",ll.length()
? ? ll.travel()

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

相關(guān)文章

  • python對(duì)象及面向?qū)ο蠹夹g(shù)詳解

    python對(duì)象及面向?qū)ο蠹夹g(shù)詳解

    這篇文章主要介紹了python對(duì)象及面向?qū)ο蠹夹g(shù),結(jié)合實(shí)例形式詳細(xì)分析了Python面向?qū)ο笏婕暗念?lèi)、對(duì)象、方法、屬性等概念與使用技巧,需要的朋友可以參考下
    2016-07-07
  • 關(guān)于Python 位運(yùn)算防坑指南

    關(guān)于Python 位運(yùn)算防坑指南

    這篇文章主要介紹了關(guān)于Python 位運(yùn)算防坑指南,小編將劇烈向大家說(shuō)明并且列舉python及C#兩種語(yǔ)言,需要的朋友可以參考下面文章的具體內(nèi)容
    2021-09-09
  • python3.7安裝matplotlib失敗問(wèn)題的完美解決方法

    python3.7安裝matplotlib失敗問(wèn)題的完美解決方法

    由于學(xué)習(xí)需要安裝matplotlib庫(kù),閱讀網(wǎng)上教程后一直出現(xiàn)各種各樣的錯(cuò)誤,下面這篇文章主要給大家介紹了關(guān)于python3.7安裝matplotlib失敗問(wèn)題的完美解決方法,需要的朋友可以參考下
    2022-07-07
  • python字符串大小寫(xiě)轉(zhuǎn)換的三種方法

    python字符串大小寫(xiě)轉(zhuǎn)換的三種方法

    本文主要介紹了python字符串大小寫(xiě)轉(zhuǎn)換的三種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Python udp網(wǎng)絡(luò)程序?qū)崿F(xiàn)發(fā)送、接收數(shù)據(jù)功能示例

    Python udp網(wǎng)絡(luò)程序?qū)崿F(xiàn)發(fā)送、接收數(shù)據(jù)功能示例

    這篇文章主要介紹了Python udp網(wǎng)絡(luò)程序?qū)崿F(xiàn)發(fā)送、接收數(shù)據(jù)功能,結(jié)合實(shí)例形式分析了Python使用socket模塊進(jìn)行udp套接字創(chuàng)建、數(shù)據(jù)收發(fā)等相關(guān)操作技巧,需要的朋友可以參考下
    2019-12-12
  • python中sympy庫(kù)求常微分方程的用法

    python中sympy庫(kù)求常微分方程的用法

    這篇文章主要介紹了python中sympy庫(kù)求常微分方程的用法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • 女友半夜加班發(fā)自拍 python男友用30行代碼發(fā)現(xiàn)驚天秘密

    女友半夜加班發(fā)自拍 python男友用30行代碼發(fā)現(xiàn)驚天秘密

    大家好,我是Lex 喜歡欺負(fù)超人那個(gè)Lex 女友說(shuō)今晚加班,還給我發(fā)了一張照片? 我心生懷疑,就用python分析了一下照片,結(jié)果發(fā)現(xiàn)。。。 劃重點(diǎn):利用Python讀取照片的GPS信息信息
    2021-08-08
  • python讀取raw binary圖片并提取統(tǒng)計(jì)信息的實(shí)例

    python讀取raw binary圖片并提取統(tǒng)計(jì)信息的實(shí)例

    今天小編就為大家分享一篇python讀取raw binary圖片并提取統(tǒng)計(jì)信息的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-01-01
  • python腳本作為Windows服務(wù)啟動(dòng)代碼詳解

    python腳本作為Windows服務(wù)啟動(dòng)代碼詳解

    本篇文章給大家分享了用python腳本寫(xiě)出作為Windows服務(wù)啟動(dòng)功能,對(duì)此有需求的朋友跟著小編一起學(xué)習(xí)下。
    2018-02-02
  • [機(jī)器視覺(jué)]使用python自動(dòng)識(shí)別驗(yàn)證碼詳解

    [機(jī)器視覺(jué)]使用python自動(dòng)識(shí)別驗(yàn)證碼詳解

    這篇文章主要介紹了python自動(dòng)識(shí)別驗(yàn)證碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05

最新評(píng)論