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

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

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

雙向鏈表

一種更復雜的鏈表是“雙向鏈表”或“雙面鏈表”。每個節(jié)點有兩個鏈接:一個指向前一個節(jié)點,當此節(jié)點為第一個節(jié)點時,指向空值;而另一個指向下一個節(jié)點,當此節(jié)點為最后一個節(jié)點時,指向空值。

操作

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

實現(xiàn)

class Node(object):
? ? """雙向鏈表節(jié)點"""
? ? 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é)點
? ? ? ? ? ? node.next = self.__head
? ? ? ? ? ? # 將_head的頭節(jié)點的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é)點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é)點

def insert(self, pos, item):
? ? ? ? """在指定位置添加節(jié)點"""
? ? ? ? if pos <= 0:
? ? ? ? ? ? self.add(item)
? ? ? ? elif pos > (self.length()-1):
? ? ? ? ? ? self.append(item)
? ? ? ? else:
? ? ? ? ? ? node = Node(item)
? ? ? ? ? ? cur = self.__head
? ? ? ? ? ? count = 0
? ? ? ? ? ? # 移動到指定位置的前一個位置
? ? ? ? ? ? while count < (pos-1):
? ? ? ? ? ? ? ? count += 1
? ? ? ? ? ? ? ? cur = cur.next
? ? ? ? ? ? # 將node的prev指向cur
? ? ? ? ? ? node.prev = cur
? ? ? ? ? ? # 將node的next指向cur的下一個節(jié)點
? ? ? ? ? ? node.next = cur.next
? ? ? ? ? ? # 將cur的下一個節(jié)點的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é)點是否是頭節(jié)點
? ? ? ? ? ? ? ? # 頭節(jié)點
? ? ? ? ? ? ? ? if cur == self.__head:
? ? ? ? ? ? ? ? ? ? self.__head = cur.next
? ? ? ? ? ? ? ? ? ? # 如果存在下一個結(jié)點,則設置下一個結(jié)點
? ? ? ? ? ? ? ? ? ? if cur.next:
? ? ? ? ? ? ? ? ? ? ? ? # 判斷鏈表是否只有一個結(jié)點
? ? ? ? ? ? ? ? ? ? ? ? cur.next.prev = None
? ? ? ? ? ? ? ? else:
? ? ? ? ? ? ? ? ? ? cur.prev.next = cur.next
? ? ? ? ? ? ? ? ? ? # 如果存在下一個結(jié)點,則設置下一個結(jié)點
? ? ? ? ? ? ? ? ? ? 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)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新評論

玉龙| 禹城市| 义乌市| 沛县| 冷水江市| 沈阳市| 平湖市| 朔州市| 平和县| 乌海市| 基隆市| 石河子市| 闸北区| 新巴尔虎左旗| 融水| 辽源市| 达州市| 涟源市| 盘山县| 榆中县| 南安市| 凤冈县| 娄烦县| 宜都市| 平谷区| 石城县| 阳春市| 通榆县| 桓台县| 兴文县| 芒康县| 高雄县| 永川市| 南岸区| 湘乡市| 华宁县| 比如县| 合江县| 南丹县| 六枝特区| 龙江县|