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

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() 鏈表長度
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):
? ? ? ? """返回鏈表的長度"""
? ? ? ? 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:
? ? ? ? ? ? # 移動到鏈表尾部
? ? ? ? ? ? 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
? ? ? ? ? ? # 移動到指定位置的前一個(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:
? ? ? ? ? ? # 找到了要刪除的元素
? ? ? ? ? ? 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

測試

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()

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

相關(guān)文章

  • Python中JsonPath提取器和正則提取器

    Python中JsonPath提取器和正則提取器

    本文主要介紹了Python中JsonPath提取器和正則提取器,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Python框架Flask的基本數(shù)據(jù)庫操作方法分析

    Python框架Flask的基本數(shù)據(jù)庫操作方法分析

    這篇文章主要介紹了Python框架Flask的基本數(shù)據(jù)庫操作方法,結(jié)合實(shí)例形式分析了Flask框架數(shù)據(jù)庫操作常用函數(shù)功能、用法及相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2018-07-07
  • Python中消息訂閱應(yīng)用開發(fā)的最優(yōu)5個(gè)方案及代碼實(shí)現(xiàn)

    Python中消息訂閱應(yīng)用開發(fā)的最優(yōu)5個(gè)方案及代碼實(shí)現(xiàn)

    消息訂閱是現(xiàn)代分布式系統(tǒng)中實(shí)現(xiàn)異步通信和解耦的核心技術(shù)之一,本文將為大家詳細(xì)介紹一下5種最優(yōu)的消息訂閱方案,感興趣的小伙伴可以了解下
    2025-03-03
  • 從0編寫區(qū)塊鏈之用python解釋區(qū)塊鏈最基本原理

    從0編寫區(qū)塊鏈之用python解釋區(qū)塊鏈最基本原理

    人工智能和區(qū)塊鏈誕生至今已經(jīng)有了十幾年,當(dāng)這些技術(shù)出現(xiàn)時(shí),人們都說他們會改變世界,但至今為止,這兩項(xiàng)技術(shù)對現(xiàn)實(shí)的影響依然有限,接下來通過本文介紹下從0編寫區(qū)塊鏈之用python解釋區(qū)塊鏈最基本原理,需要的朋友可以參考下
    2022-02-02
  • python實(shí)現(xiàn)水印生成器

    python實(shí)現(xiàn)水印生成器

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)水印生成器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • python 文本單詞提取和詞頻統(tǒng)計(jì)的實(shí)例

    python 文本單詞提取和詞頻統(tǒng)計(jì)的實(shí)例

    今天小編就為大家分享一篇python 文本單詞提取和詞頻統(tǒng)計(jì)的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • Python?enumerate()計(jì)數(shù)器簡化循環(huán)

    Python?enumerate()計(jì)數(shù)器簡化循環(huán)

    這篇文章主要介紹了Python?enumerate()計(jì)數(shù)器簡化循環(huán),enumerate()最大的優(yōu)點(diǎn)就是它返回一個(gè)帶有計(jì)數(shù)器和值的元組,因此我們不必自己增加計(jì)數(shù)器,下面就來看看文章具體對它的詳細(xì)介紹吧,需要的朋友可以參考一下
    2021-12-12
  • python線程池的實(shí)現(xiàn)實(shí)例

    python線程池的實(shí)現(xiàn)實(shí)例

    這篇文章主要介紹了python線程池的實(shí)現(xiàn)方法,代碼簡單實(shí)用,供大家參考使用
    2013-11-11
  • python可視化分析的實(shí)現(xiàn)(matplotlib、seaborn、ggplot2)

    python可視化分析的實(shí)現(xiàn)(matplotlib、seaborn、ggplot2)

    這篇文章主要介紹了python可視化分析的實(shí)現(xiàn)(matplotlib、seaborn、ggplot2),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • 解決numpy數(shù)組互換兩行及賦值的問題

    解決numpy數(shù)組互換兩行及賦值的問題

    這篇文章主要介紹了解決numpy數(shù)組互換兩行及賦值的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04

最新評論

广南县| 夏津县| 建德市| 厦门市| 天全县| 美姑县| 平武县| 鹤岗市| 仁布县| 密云县| 革吉县| 闵行区| 石渠县| 襄汾县| 安乡县| 延庆县| 南平市| 防城港市| 始兴县| 肥乡县| 无为县| 壶关县| 平潭县| 广东省| 康马县| 玉屏| 息烽县| 迭部县| 沙田区| 原平市| 宁海县| 海盐县| 抚远县| 雷山县| 云浮市| 北流市| 涿鹿县| 玉树县| 虎林市| 宁乡县| 扶风县|