欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

概述:

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

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

操作

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

具體代碼:

class Node(object):
  """節(jié)點"""
  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é)點"""
    node = Node(item)
    if self.is_empty():
      self._head = node
      node.next = self._head
    else:
      #添加的節(jié)點指向_head
      node.next = self._head
      # 移到鏈表尾部,將尾部節(jié)點的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é)點"""
    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é)點指向node
      cur.next = node
      # 將node指向頭節(jié)點_head
      node.next = self._head
  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.next = cur.next
      cur.next = node
  def remove(self, item):
    """刪除一個節(jié)點"""
    # 若鏈表為空,則直接返回
    if self.is_empty():
      return
    # 將cur指向頭節(jié)點
    cur = self._head
    pre = None
    # 若頭節(jié)點的元素就是要查找的元素item
    if cur.item == item:
      # 如果鏈表不止一個節(jié)點
      if cur.next != self._head:
        # 先找到尾節(jié)點,將尾節(jié)點的next指向第二個節(jié)點
        while cur.next != self._head:
          cur = cur.next
        # cur指向了尾節(jié)點
        cur.next = self._head.next
        self._head = self._head.next
      else:
        # 鏈表只有一個節(jié)點
        self._head = None
    else:
      pre = self._head
      # 第一個節(jié)點不是要刪除的
      while cur.next != self._head:
        # 找到了要刪除的元素
        if cur.item == item:
          # 刪除
          pre.next = cur.next
          return
        else:
          pre = cur
          cur = cur.next
      # cur 指向尾節(jié)點
      if cur.item == item:
        # 尾部刪除
        pre.next = cur.next
  def search(self, item):
    """查找節(jié)點是否存在"""
    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()

運行結(jié)果:

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

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

相關(guān)文章

  • python中有函數(shù)重載嗎

    python中有函數(shù)重載嗎

    在本篇內(nèi)容里下邊給大家整理的是關(guān)于python函數(shù)重載的知識點總結(jié),有需要的朋友們可以學習下。
    2020-05-05
  • 解讀FastAPI異步化為transformers模型打造高性能接口

    解讀FastAPI異步化為transformers模型打造高性能接口

    這篇文章主要介紹了解讀FastAPI異步化為transformers模型打造高性能接口問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Python對PDF文檔和PPT文檔的操作詳解

    Python對PDF文檔和PPT文檔的操作詳解

    Python辦公?動化是利?Python編程語?來創(chuàng)建腳本和程序,以簡化、加速和?動化?常辦公任務和?作流程的過程,它基于Python的強?功能和豐富的第三?庫,使得能夠處理各種辦公任務,本文給大家介紹了Python對PDF文檔和PPT文檔的操作,需要的朋友可以參考下
    2023-12-12
  • python 實現(xiàn)簡單的FTP程序

    python 實現(xiàn)簡單的FTP程序

    這篇文章主要介紹了python 實現(xiàn)簡單的FTP程序,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12
  • 簡單了解Django ORM常用字段類型及參數(shù)配置

    簡單了解Django ORM常用字段類型及參數(shù)配置

    這篇文章主要介紹了簡單了解Django ORM常用字段類型及參數(shù)配置,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-01-01
  • Python爬蟲抓取代理IP并檢驗可用性的實例

    Python爬蟲抓取代理IP并檢驗可用性的實例

    今天小編就為大家分享一篇Python爬蟲抓取代理IP并檢驗可用性的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Python使用filetype精確判斷文件類型

    Python使用filetype精確判斷文件類型

    判斷文件類型在開發(fā)中非常常見的需求,怎樣才能準確的判斷文件類型呢?首先大家想到的是文件的后綴,但是非常遺憾的是這種方法是非常不靠譜的,因為文件的后綴是可以隨意更改的,而python中有個小插件可以實現(xiàn),下面我們就來詳細探討下
    2017-07-07
  • python文件排序的方法總結(jié)

    python文件排序的方法總結(jié)

    在本篇內(nèi)容里小編給各位整理的是一篇關(guān)于python文件排序的方法總結(jié),有需要的朋友們可以參考下。
    2020-09-09
  • Django 實現(xiàn)前端圖片壓縮功能的方法

    Django 實現(xiàn)前端圖片壓縮功能的方法

    今天小編就為大家分享一篇Django 實現(xiàn)前端圖片壓縮功能的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Python列表常用函數(shù)使用詳解

    Python列表常用函數(shù)使用詳解

    這篇文章主要為大家介紹了Python列表常用的一些函數(shù)的使用詳解,并通過一些簡單的案例讓大家更快的理解,感興趣的可以跟隨小編一起學習一下
    2021-12-12

最新評論