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

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

 更新時(shí)間:2017年11月10日 12:04:41   作者:Erick-LONG  
這篇文章主要介紹了Python實(shí)現(xiàn)的單向循環(huán)鏈表功能,簡(jiǎ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() 返回鏈表的長(zhǎng)度
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):
    """返回鏈表的長(zhǎng)度"""
    # 如果鏈表為空,返回長(zhǎng)度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
      # 移動(dòng)到指定位置的前一個(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)不是要?jiǎng)h除的
      while cur.next != self._head:
        # 找到了要?jiǎng)h除的元素
        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)典教程

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

相關(guān)文章

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

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

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

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

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

    Python對(duì)PDF文檔和PPT文檔的操作詳解

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

    python 實(shí)現(xiàn)簡(jiǎn)單的FTP程序

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

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

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

    Python爬蟲抓取代理IP并檢驗(yàn)可用性的實(shí)例

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

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

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

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

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

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

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

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

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

最新評(píng)論