Python双向链表,python循环单链表的基本操作

  Python双向链表,python循环单链表的基本操作

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

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

  双向链表:所有数据都存储在节点中,每个节点首尾相连,

  每个节点有一个数据存储区和两个链接区,一个链接前一个节点,另一个链接下一个节点。

  双向链表操作

  1.链表是空的吗?

  2.链表的长度

  3.遍历链表

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

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

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

  7.删除链表中的节点。

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

  代码实现

  # Functions函数声明

  类节点():

  实例化节点类

  def __init__(self,item):

  self.item=项目

  self.prev=无

  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.遍历链表

  定义差旅(自助):

  遍历链表

  实例化游标,遍历链表,每次输出节点的数据。

  空链表

  只有头节点

  #实例化光标

  cur=self.head

  #确定它是否为空。

  if self.is_empty():

  不返回

  else:

  #非空的情况

  下一个!=self.head:

  print(cur.item,end= )

  下一个

  打印(当前项目)

  及格

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

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

  标题添加

  实例化节点,

  #实例化节点

  节点=节点(项目)

  #实例化光标

  cur=self.head

  #确定它是否为空。

  if self.is_empty():

  node.next=node

  node.prev=节点

  self.head=node

  else:

  #链表不为空的情况

  #只有一个节点的情况

  # node.next=self.head

  node.next=cur

  node.prev=cur

  if cur.next==self.head:

  #打印(当前项目)

  cur.prev=节点

  c

  ur.next = node

                  self.head = node

              elif cur.next != self.head:

                  pro = self.head

                  while cur.next != self.head:

                      cur = cur.next

                  pro.prev = node

                  cur.next = node

                  self.head = node

                  pass

      # 5. 链表尾部添加元素

      def append(self, item):

          """

          链表尾部添加数据

          实例化节点,实例化游标,指向尾部节点,修改指向

          链表为空

          """

          # 实例化节点

          node = Node(item)

          # 实例化游标

          cur = self.head

          if self.is_empty():

              self.add(item)

          else:

              # 不为空的情况

              # 指针指向最后一个节点

              self.head.prev = node

              node.next = self.head

              while cur.next != self.head:

                  cur = cur.next

              node.prev = cur

              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:

              # 中间添加数据

              # 声明计数

              count = 0

              print(index)

              while count < index-1:

                  count+=1

                  cur = cur.next

              # print(cur.item)

              node.next = cur.next

              node.prev = cur

              cur.next.prev = node

              cur.next = node

              pass

      # 7. 链表删除节点

      def remove(self, item):

          """

          删除数据

          实例化游标,遍历链表,查找有没有改数据

          有,对改数据两侧的节点进行指向修改

          """

          # 实例化游标

          cur = self.head

          # 判断是否为空

          if self.is_empty():

              return None

          else:

              # 不为空的情况下

              # 如果删除的是头节点

              if cur.item == item:

                  # 如果只有一个头节点

                  if cur.next == self.head:

                     self.head = None

                  else:

                      # self.head = cur.next

                      pro = cur.next

                      while cur.next != self.head:

                          cur = cur.next

                      cur.next = pro

                      pro.prev = cur

                      self.head = pro

                      pass

              else:

                  while cur.next != self.head:

                      if cur.item == item:

                          # print(cur.item)

                          pro = cur.prev

                          nex = cur.next

                          pro.next = cur.next

                          nex.prev = pro

                          return True

                      else:

                          cur = cur.next

                  # 如果是最后一个节点

                  if cur.item == item:

                      cur.prev.next = self.head

                      self.head.prev = cur.prev

      # 8. 查找节点是否存在

      def search(self, item):

          """

          查询指定的数据是否存在

          实例化游标

          遍历所有的节点。每个节点中判断数据是否相等,相等,返回True

          """

          # 实例化游标

          cur = self.head

          # 判断是否为空

          if self.is_empty():

              return None

          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.append(11)

      a.add(1)

      a.insert(30, 12) # 1 100 200 300 400 10 11 12

      a.remove(1)    # 100 200 300 400 10 11 12

      a.remove(12)   # 100 200 300 400 10 11

      a.remove(400)  # # 100 200 300  10 11

      a.remove(4000)

      print(a.search(100))  # True

      print(a.search(11))   # True

      print(a.search(111))  # None

      print(a.is_empty())   # False

      a.travel()            # 100 200 300 10 11

      print(a.length())     # 5

      pass

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

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

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