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

Python實(shí)現(xiàn)的單向循環(huán)鏈表功能示例

 更新時(shí)間:2017年11月10日 12:04:41   作者:Erick-LONG  
這篇文章主要介紹了Python實(shí)現(xiàn)的單向循環(huán)鏈表功能,簡單描述了單向循環(huán)鏈表的概念、原理并結(jié)合實(shí)例形式分析了Python定義與使用單向循環(huán)鏈表的相關(guān)操作技巧,需要的朋友可以參考下

本文實(shí)例講述了Python實(shí)現(xiàn)的單向循環(huán)鏈表功能。分享給大家供大家參考,具體如下:

概述:

單向循環(huán)鏈表是指在單鏈表的基礎(chǔ)上,表的最后一個(gè)元素指向鏈表頭結(jié)點(diǎn),不再是為空。

由圖可知,單向循環(huán)鏈表的判斷條件不再是表為空了,而變成了是否到表頭。

操作

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

具體代碼:

class Node(object):
  """節(jié)點(diǎn)"""
  def __init__(self, item):
    self.item = item
    self.next = None
class SinCycLinkedlist(object):
  """單向循環(huán)鏈表"""
  def __init__(self):
    self._head = None
  def is_empty(self):
    """判斷鏈表是否為空"""
    return self._head == None
  def length(self):
    """返回鏈表的長度"""
    # 如果鏈表為空,返回長度0
    if self.is_empty():
      return 0
    count = 1
    cur = self._head
    while cur.next != self._head:
      count += 1
      cur = cur.next
    return count
  def travel(self):
    """遍歷鏈表"""
    if self.is_empty():
      return
    cur = self._head
    print cur.item,
    while cur.next != self._head:
      cur = cur.next
      print cur.item,
    print ""
  def add(self, item):
    """頭部添加節(jié)點(diǎn)"""
    node = Node(item)
    if self.is_empty():
      self._head = node
      node.next = self._head
    else:
      #添加的節(jié)點(diǎn)指向_head
      node.next = self._head
      # 移到鏈表尾部,將尾部節(jié)點(diǎn)的next指向node
      cur = self._head
      while cur.next != self._head:
        cur = cur.next
      cur.next = node
      #_head指向添加node的
      self._head = node
  def append(self, item):
    """尾部添加節(jié)點(diǎn)"""
    node = Node(item)
    if self.is_empty():
      self._head = node
      node.next = self._head
    else:
      # 移到鏈表尾部
      cur = self._head
      while cur.next != self._head:
        cur = cur.next
      # 將尾節(jié)點(diǎn)指向node
      cur.next = node
      # 將node指向頭節(jié)點(diǎn)_head
      node.next = self._head
  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.next = cur.next
      cur.next = node
  def remove(self, item):
    """刪除一個(gè)節(jié)點(diǎn)"""
    # 若鏈表為空,則直接返回
    if self.is_empty():
      return
    # 將cur指向頭節(jié)點(diǎn)
    cur = self._head
    pre = None
    # 若頭節(jié)點(diǎn)的元素就是要查找的元素item
    if cur.item == item:
      # 如果鏈表不止一個(gè)節(jié)點(diǎn)
      if cur.next != self._head:
        # 先找到尾節(jié)點(diǎn),將尾節(jié)點(diǎn)的next指向第二個(gè)節(jié)點(diǎn)
        while cur.next != self._head:
          cur = cur.next
        # cur指向了尾節(jié)點(diǎn)
        cur.next = self._head.next
        self._head = self._head.next
      else:
        # 鏈表只有一個(gè)節(jié)點(diǎn)
        self._head = None
    else:
      pre = self._head
      # 第一個(gè)節(jié)點(diǎn)不是要刪除的
      while cur.next != self._head:
        # 找到了要刪除的元素
        if cur.item == item:
          # 刪除
          pre.next = cur.next
          return
        else:
          pre = cur
          cur = cur.next
      # cur 指向尾節(jié)點(diǎn)
      if cur.item == item:
        # 尾部刪除
        pre.next = cur.next
  def search(self, item):
    """查找節(jié)點(diǎn)是否存在"""
    if self.is_empty():
      return False
    cur = self._head
    if cur.item == item:
      return True
    while cur.next != self._head:
      cur = cur.next
      if cur.item == item:
        return True
    return False
if __name__ == "__main__":
  ll = SinCycLinkedlist()
  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(7)
  ll.remove(1)
  print "length:",ll.length()
  ll.travel()

運(yùn)行結(jié)果:

更多關(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è)計(jì)有所幫助。

相關(guān)文章

  • 使用Python的OpenCV模塊識別滑動驗(yàn)證碼的缺口(推薦)

    使用Python的OpenCV模塊識別滑動驗(yàn)證碼的缺口(推薦)

    這篇文章主要介紹了使用Python的OpenCV模塊識別滑動驗(yàn)證碼的缺口,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-05-05
  • python用循環(huán)新建多個(gè)列表的代碼實(shí)例

    python用循環(huán)新建多個(gè)列表的代碼實(shí)例

    當(dāng)我們處理數(shù)據(jù)時(shí),有時(shí)候需要創(chuàng)建多個(gè)列表以存儲不同類型或不同條件下的數(shù)據(jù),在Python中,我們可以利用循環(huán)來快速、高效地創(chuàng)建這些列表,本文將介紹如何使用循環(huán)在Python中創(chuàng)建多個(gè)列表,并提供代碼實(shí)例,需要的朋友可以參考下
    2024-04-04
  • 樹莓派與PC端在局域網(wǎng)內(nèi)運(yùn)用python實(shí)現(xiàn)即時(shí)通訊

    樹莓派與PC端在局域網(wǎng)內(nèi)運(yùn)用python實(shí)現(xiàn)即時(shí)通訊

    這篇文章主要為大家詳細(xì)介紹了樹莓派與PC端在局域網(wǎng)內(nèi)運(yùn)用python實(shí)現(xiàn)即時(shí)通訊,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • python小程序之4名牌手洗牌發(fā)牌問題解析

    python小程序之4名牌手洗牌發(fā)牌問題解析

    這篇文章主要為大家詳細(xì)介紹了python小程序之4名牌手洗牌發(fā)牌問題,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • Python dict和defaultdict使用實(shí)例解析

    Python dict和defaultdict使用實(shí)例解析

    這篇文章主要介紹了Python dict和defaultdict使用實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Python裝飾器使用你可能不知道的幾種姿勢

    Python裝飾器使用你可能不知道的幾種姿勢

    這篇文章主要給大家介紹了關(guān)于Python裝飾器使用你可能不知道的幾種姿勢,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Python基礎(chǔ)之高級變量類型實(shí)例詳解

    Python基礎(chǔ)之高級變量類型實(shí)例詳解

    這篇文章主要介紹了Python基礎(chǔ)之高級變量類型,結(jié)合實(shí)例形式詳細(xì)分析了Python元組、字典、字符串、公共方法以及遍歷、切片等常見操作技巧,需要的朋友可以參考下
    2020-01-01
  • 分析python切片原理和方法

    分析python切片原理和方法

    這篇文章主要通過代碼實(shí)例給大家詳細(xì)介紹了python切片原理和方法,有興趣的朋友跟著學(xué)習(xí)下吧。
    2017-12-12
  • python opencv實(shí)現(xiàn)信用卡的數(shù)字識別

    python opencv實(shí)現(xiàn)信用卡的數(shù)字識別

    這篇文章主要介紹了python opencv實(shí)現(xiàn)信用卡的數(shù)字識別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • 使用Python批量連接華為網(wǎng)絡(luò)設(shè)備的操作步驟

    使用Python批量連接華為網(wǎng)絡(luò)設(shè)備的操作步驟

    隨著網(wǎng)絡(luò)規(guī)模的擴(kuò)大和設(shè)備數(shù)量的增加,手動配置和管理每臺網(wǎng)絡(luò)設(shè)備變得越來越不現(xiàn)實(shí),因此,自動化工具和腳本變得尤為重要,本篇文章將詳細(xì)介紹如何使用Python批量連接華為網(wǎng)絡(luò)設(shè)備,實(shí)現(xiàn)自動化配置和管理,需要的朋友可以參考下
    2024-06-06

最新評論

东源县| 馆陶县| 江阴市| 盐边县| 临泉县| 雅安市| 广汉市| 类乌齐县| 信丰县| 桐庐县| 贵溪市| 霸州市| 商都县| 青海省| 东台市| 通山县| 东至县| 庆城县| 云南省| 定兴县| 哈巴河县| 新源县| 绵竹市| 运城市| 绥阳县| 仁怀市| 哈巴河县| 濉溪县| 南木林县| 灌南县| 固镇县| 鱼台县| 康保县| 永嘉县| 孝昌县| 红桥区| 平遥县| 丹阳市| 高淳县| 海门市| 绥芬河市|