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

python雙向鏈表原理與實(shí)現(xiàn)方法詳解

 更新時間:2019年12月03日 08:38:40   作者:xlengji  
這篇文章主要介紹了python雙向鏈表原理與實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了Python雙向鏈表的定義、以及節(jié)點(diǎn)的判斷、遍歷、添加、刪除等相關(guān)操作技巧,需要的朋友可以參考下

本文實(shí)例講述了python雙向鏈表原理與實(shí)現(xiàn)方法。分享給大家供大家參考,具體如下:

雙向鏈表

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

操作

  • 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
      # 移動到指定位置的前一個位置
      while count < (pos-1):
        count += 1
        cur = cur.next
      # 將node的prev指向cur
      node.prev = cur
      # 將node的next指向cur的下一個節(jié)點(diǎn)
      node.next = cur.next
      # 將cur的下一個節(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
          # 如果存在下一個結(jié)點(diǎn),則設(shè)置下一個結(jié)點(diǎn)
          if cur.next:
            # 判斷鏈表是否只有一個結(jié)點(diǎn)
            cur.next.prev = None
        else:
          cur.prev.next = cur.next
          # 如果存在下一個結(jié)點(diǎn),則設(shè)置下一個結(jié)點(diǎn)
          if cur.next:
            cur.next.prev = cur.prev
        break
      else:
        cur = cur.next

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python加密解密算法與技巧總結(jié)》、《Python編碼操作技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門與進(jìn)階經(jīng)典教程

希望本文所述對大家Python程序設(shè)計有所幫助。

相關(guān)文章

  • 使用 Python 實(shí)現(xiàn)微信消息的一鍵已讀的思路代碼

    使用 Python 實(shí)現(xiàn)微信消息的一鍵已讀的思路代碼

    利用python可以實(shí)現(xiàn)微信消息的一鍵已讀功能,怎么實(shí)現(xiàn)呢?你肯定會想著很復(fù)雜,但是python的好處就是很多人已經(jīng)把接口打包做好了,只需要調(diào)用即可,今天通過本文給大家分享使用 Python 實(shí)現(xiàn)微信消息的一鍵已讀的思路代碼,一起看看吧
    2021-06-06
  • 用python實(shí)現(xiàn)彈球小游戲

    用python實(shí)現(xiàn)彈球小游戲

    大家好,本篇文章主要講的是用python實(shí)現(xiàn)彈球小游戲,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • python實(shí)現(xiàn)在IDLE中輸入多行的方法

    python實(shí)現(xiàn)在IDLE中輸入多行的方法

    下面小編就為大家分享一篇python實(shí)現(xiàn)在IDLE中輸入多行的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • 分享5個短小精悍的Python趣味腳本,適合小白上手!

    分享5個短小精悍的Python趣味腳本,適合小白上手!

    這篇文章主要給大家分享介紹了5個短小精悍的Python趣味腳本,非常適合小白上手,分別包含圖片尺寸縮小、pdf轉(zhuǎn)txt文檔、猜數(shù)字游戲、電池電量告警以及圖片添加水印等腳本,需要的朋友可以參考下
    2022-02-02
  • 如何利用飾器實(shí)現(xiàn) Python 函數(shù)重載

    如何利用飾器實(shí)現(xiàn) Python 函數(shù)重載

    這篇文章主要介紹了如何利用飾器實(shí)現(xiàn) Python 函數(shù)重載,需要的朋友可以參考下面文章內(nèi)容,希望能幫助到你
    2021-09-09
  • Python 列表list使用介紹

    Python 列表list使用介紹

    這篇文章主要介紹了Python 列表list使用介紹,需要的朋友可以參考下
    2014-11-11
  • Python爬蟲入門案例之爬取二手房源數(shù)據(jù)

    Python爬蟲入門案例之爬取二手房源數(shù)據(jù)

    讀萬卷書不如行萬里路,學(xué)的扎不扎實(shí)要通過實(shí)戰(zhàn)才能看出來,今天小編給大家?guī)硪环輕ython爬取二手房源信息的案例,可以用來直觀的了解房價行情,大家可以在過程中查缺補(bǔ)漏,看看自己掌握程度怎么樣
    2021-10-10
  • 讓Python更加充分的使用Sqlite3

    讓Python更加充分的使用Sqlite3

    這篇文章主要為大家詳細(xì)介紹了Python更加充分的使用Sqlite3的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • Python標(biāo)準(zhǔn)庫sched模塊使用指南

    Python標(biāo)準(zhǔn)庫sched模塊使用指南

    這篇文章主要介紹了Python標(biāo)準(zhǔn)庫sched模塊使用的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • python中常見錯誤及解決方法

    python中常見錯誤及解決方法

    在本篇內(nèi)容里小編給大家分享的是一篇關(guān)于python中常見錯誤及解決方法的知識點(diǎn)內(nèi)容,需要的朋友們參考下。
    2020-06-06

最新評論

梅州市| 镇原县| 富平县| 郴州市| 无棣县| 萨嘎县| 镇坪县| 天全县| 重庆市| 汨罗市| 阜平县| 银川市| 大丰市| 盐源县| 晋城| 肇州县| 德令哈市| 浦城县| 万宁市| 淮南市| 凌海市| 咸宁市| 沅江市| 江津市| 阿勒泰市| 马鞍山市| 永仁县| 汉沽区| 榕江县| 四川省| 高青县| 五原县| 额济纳旗| 留坝县| 鄂托克前旗| 马山县| 措勤县| 晴隆县| 鹤山市| 抚顺市| 祥云县|