亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

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

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

Python實現(xiàn)

class Node(object):
?? ?'''雙向鏈表節(jié)點'''
?? ?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):
?? ??? ?'''返回鏈表的長度'''
?? ??? ?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é)點
?? ??? ??? ?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():
?? ??? ??? ?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()
?? ??? ??? ?cur = self._head()
?? ??? ??? ?count = 0
?? ??? ??? ?# 移動到指定的前一個位置
?? ??? ??? ?while cur < 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):
?? ??? ?'''刪除元素'''
?? ??? ?if self.is_empty(): return?
?? ??? ?else:
?? ??? ??? ?cur = self._head
?? ??? ??? ?if cur.item == item:
?? ??? ??? ??? ?# 如果首節(jié)點的元素是要刪除的元素
?? ??? ??? ??? ?if cur.next == None:
?? ??? ??? ??? ??? ?# 如果鏈表中只有一個節(jié)點
?? ??? ??? ??? ??? ?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

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

相關文章

  • Windows環(huán)境下如何使用Pycharm運行sh文件

    Windows環(huán)境下如何使用Pycharm運行sh文件

    這篇文章主要介紹了Windows環(huán)境下如何使用Pycharm運行sh文件,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-02-02
  • 對Python中創(chuàng)建進程的兩種方式以及進程池詳解

    對Python中創(chuàng)建進程的兩種方式以及進程池詳解

    今天小編就為大家分享一篇對Python中創(chuàng)建進程的兩種方式以及進程池詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • python輸出100以內(nèi)的質(zhì)數(shù)與合數(shù)實例代碼

    python輸出100以內(nèi)的質(zhì)數(shù)與合數(shù)實例代碼

    本文通過實例代碼給大家介紹了python輸出100以內(nèi)的質(zhì)數(shù)與合數(shù)的方法,非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧
    2018-07-07
  • 在python中如何建立一個自己的包

    在python中如何建立一個自己的包

    這篇文章主要介紹了在python中如何建立一個自己的包,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Python range、enumerate和zip函數(shù)用法詳解

    Python range、enumerate和zip函數(shù)用法詳解

    這篇文章主要介紹了Python range、enumerate和zip函數(shù)用法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • 對python3標準庫httpclient的使用詳解

    對python3標準庫httpclient的使用詳解

    今天小編就為大家分享一篇對python3標準庫httpclient的使用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • python文件操作之目錄遍歷實例分析

    python文件操作之目錄遍歷實例分析

    這篇文章主要介紹了python文件操作之目錄遍歷的方法,以實例形式較為詳細的分析了目錄遍歷所需要用到的相關函數(shù)與使用技巧,需要的朋友可以參考下
    2015-05-05
  • django如何連接已存在數(shù)據(jù)的數(shù)據(jù)庫

    django如何連接已存在數(shù)據(jù)的數(shù)據(jù)庫

    這篇文章主要給大家介紹了關于django如何連接已存在數(shù)據(jù)的數(shù)據(jù)庫的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用django具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-08-08
  • Python+Delorean實現(xiàn)時間格式智能轉(zhuǎn)換

    Python+Delorean實現(xiàn)時間格式智能轉(zhuǎn)換

    DeLorean是一個Python的第三方模塊,基于?pytz?和?dateutil?開發(fā),用于處理Python中日期時間的格式轉(zhuǎn)換。本文將詳細講講DeLorean的使用,感興趣的可以了解一下
    2022-04-04
  • 淺析Python中作用域的應用

    淺析Python中作用域的應用

    這篇文章主要是想和大家一起來討論下去Python中的命名空間、作用域和LEGB規(guī)則等不同概念,文中的示例代碼簡潔易懂,快跟隨小編一起來學習一下吧
    2023-08-08

最新評論