国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python實現的單向循環鏈表功能示例

2020-01-04 16:30:47
字體:
來源:轉載
供稿:網友

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

概述:

單向循環鏈表是指在單鏈表的基礎上,表的最后一個元素指向鏈表頭結點,不再是為空。

Python,單向循環鏈表

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

操作

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

具體代碼:

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

運行結果:

Python,單向循環鏈表

 

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


注:相關教程知識閱讀請移步到python教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 贡山| 衢州市| 曲周县| 永城市| 贡觉县| 石首市| 泗洪县| 台中市| 益阳市| 临西县| 定边县| 花莲市| 密山市| 许昌市| 普格县| 镇坪县| 阳江市| 高平市| 东台市| 革吉县| 临澧县| 泰兴市| 普安县| 汶上县| 吴忠市| 庐江县| 大余县| 中西区| 古田县| 台中县| 海伦市| 电白县| 汶川县| 阿勒泰市| 乌兰浩特市| 信丰县| 贵州省| 三门县| 延安市| 通州区| 葫芦岛市|