python实现循环链表,python单链表实现具体例子

  python实现循环链表,python单链表实现具体例子

  本文主要详细介绍python单向循环链表的例子。本文中的示例代码非常详细,具有一定的参考价值。感兴趣的朋友可以参考一下。

  用python实现单向循环链表,供大家参考。具体情况如下

  单向循环链表

  将所有节点链接在一起,每个节点分为数据存储区和链接区,数据区存储数据,链接区链接下一个节点。

  项目:存储数据的位置。

  下一个:链接下一个节点。

  注意:单向循环链表是第一个链接,即末尾的节点要和头的节点链接。

  单向链表操作

  1.链表是空的吗?

  2.链表的长度

  3.遍历链表

  4.向链表的头部添加元素。

  5.在链表的末尾添加元素。

  6.在链表中的指定位置添加一个元素。

  7.删除链表中的节点。

  8.找出该节点是否存在。

  代码实现

  # Functions函数声明

  类节点():

  实例化节点类

  def __init__(self,item):

  self.item=项目

  self.next=无

  类链表():

  存储节点类

  def __init__(self):

  self.head=无

  # 1.链表是空的吗?

  定义为_空(自身):

  返回self.head==None

  # 2.链表的长度

  定义长度(自身):

  返回链表的长度。

  遍历所有节点,并用计数器计数。

  1.链接列表为空。

  #实例化节点

  cur=self.head

  if self.is_empty():

  返回0

  else:

  #计数

  计数=1

  #遍历链表

  下一个!=self.head:

  计数=1

  下一个

  返回计数

  # 3.遍历链表

  定义差旅(自助):

  遍历链表获取所有数据。

  实例光标、遍历数据、输出数据

  1.空链表

  2.只有头节点。

  3.只有尾节点。

  #实例化光标

  cur=self.head

  if self.is_empty():

  不返回

  else:

  #导线数据

  下一个!=self.head:

  print(cur.item,end= )

  下一个

  #最后一个节点应该单独输出

  打印(当前项目)

  # 4.向链表的头部添加一个元素

  定义添加(自身,项目):

  向链接列表头添加数据。

  分析

  链接列表为空。

  Self.head直接指向node,然后node指向自己。

  链接列表不为空。

  node.next=self.head

  #实例化光标

  cur=self.head

  #实例化节点

  节点=节点(项目)

  #确定它是否为空。

  if self.is_empty():

  self.head=node

  node.next=node

  else:

  #非空的情况

  #将最后一个节点指向节点

  下一个!=self.head:

  下一个

     node.next = self.head

              self.head = node

              cur.next = node

      # 5. 链表尾部添加元素

      def append(self, item):

          """

          往尾部添加数据

          分析

          实例化节点,再实例化游标先指向最后一个节点

          调换指向

          1、空链表情况

          2、只有一个链表情况

          """

          # 实例化节点

          node = Node(item)

          # 实例化游标

          cur = self.head

          # 判断是否为空

          if self.is_empty():

              self.add(item)

          else:

              # 不为空的情况,移动游标指向最后一个节点

              while cur.next != self.head:

                  cur = cur.next

              node.next = self.head

              cur.next = node

              pass

      # 6. 链表指定位置添加元素

      def insert(self, index, item):

          """

          指定位置添加数据

          实例化节点, 实例化游标指向索引的数据,更改指向

          位置大小

          链表是否为空

          """

          # 实例化节点

          node = Node(item)

          # 实例化游标

          cur = self.head

          if index <=0:

              self.add(item)

          elif index > (self.length()-1):

              self.append(item)

          else:

              # 判断链表是否为空

              if self.is_empty():

                  self.add(item)

              else:

                  # 移动游标,指向指定的索引位置

                  count = 0

                  while count < index-1:

                      count+=1

                      cur = cur.next

                  node.next = cur.next

                  cur.next = node

              pass

      # 7. 链表删除节点

      def remove(self, item):

          """

          删除指定的节点

          实例化游标,遍历链表插件这个节点是否存在,存在则更改指向

          不存在,则不修改

          空链表情况

          头节点情况

          尾结点情况

          """

          # 实例化游标

          cur = self.head

          if self.is_empty():

              return None

          else:

              # 不为空,遍历链表,对比数据是否相等

              # 如果头节点是要删除的数据

              if cur.item == item:

                  self.head=cur.next

                  # 找出最后的节点,将最后的节点指向,删除后面的那个节点

                  while cur.next != self.head:

                      cur = cur.next

                  cur.next = cur.next

              else:

                  pro = None

                  while cur.next != self.head:

                      if cur.item == item:

                          if cur.item == item:

                              pro.next = cur.next

                              return True

                      else:

                          pro = cur

                          cur = cur.next

                  if cur.item == item:

                      pro.next = self.head

              pass

      # 8. 查找节点是否存在

      def search(self, item):

          """

          查找该节点是否存在

          实例化游标,遍历所有的节点

          查看当前节点的数据是否和item 相等

          空链表

          头节点

          尾结点

          """

          # 实例化游标

          cur = self.head

          # 判断空链表

          if self.is_empty():

              return None

          else:

              # 不为空遍历整个链表

              if cur.item == item:

                  return True

              else:

                  while cur.next != self.head:

                      if cur.item == item:

                          return True

                      else:

                          cur = cur.next

                  if cur.item == item:

                      return True

              pass

  测试运行

  

# 程序的入口

  if __name__ == "__main__":

      a = Linklist()

      a.add(400)

      a.add(300)

      a.add(200)

      a.add(100)

      # a.append(10)

      a.insert(4,6)

      # a.remove(6)

      print(a.length())  # 5

      a.travel()         # 100 200 300 400 6

      print(a.search(100)) # True

      pass

  以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: