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

  #技术专家

  #如果链表为空,则不进入循环,直接输出0。

  计数=0

  #遍历所有数据

  一边诅咒!=无:

  计数=1

  下一个

  返回计数

  # 3.遍历链表

  def treval(self):

  遍历链表获取所有数据。

  用游标遍历整个链表,每次输出cur.item的值。

  注意,链表是空的,

  #实例化一个游标

  cur=self.head

  #遍历链表

  一边诅咒!=无:

  print(cur.item,end= )

  下一个

  打印()

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

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

  标题添加数据

  分析:

  1.将数据添加到头部。当链表为空时:self.head指向node。

  2.链表非空时:先设置node.next=self.head.next然后说self.head=node。

  #实例化节点

  节点=节点(项目)

  #添加数据

  #确定链表是否为空。

  if self.is_empty():

  #为空,直接将self.head指向节点。

  self.head=node

  else:

  #如果不为空,首先设置noede。

  node.next=self.head

  self.head.prev=node

  self.head=node

  # 5.在链表的末尾添加一个元素

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

  在尾部添加数据

  分析:

  首先将指针指向尾节点。

  Cur.next=最后一个节点的节点,node.prev=cur

       # 实例化节点

          node = Node(item)

          # 实例化游标

          cur = self.head

          # 移动游标到最后一个节点

          # 如果链表为空

          # 直接使用头插法

          if self.is_empty():

              self.add(item)

          else:

              while cur.next != None:

                  # cur.next 不为空,则进入循环, 上次循环,是进入上上个节点,但 将cur  = cur.next,就指向了最后一个节点

                  cur = cur.next

              node.prev = cur

              cur.next = node

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

      def insert(self, index, item):

          """

          指定位置添加数据

          分析

          单链表中需要实例化两个有游标

          双向链表,直接向指针指向索引的位置

          将这个位置节点的 cur.

          """

          # 实例化节点

          node = Node(item)

          # 实例化游标

          cur = self.head

          # 起始位置

          count = 0

          if index<=0:

              # 使用头插法

              self.add(item)

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

              self.append(item)

          else:

              # 移动游标

              while count < index:

                  # 增加一

                  count += 1

                  # 移动游标到索引位置

                  cur = cur.next

              node.next = cur

              node.prev = cur.prev

              cur.prev.next = node

              cur.prev = node

      # 7. 链表删除节点

      def remove(self,item):

          """

          删除指定的节点

          首先实例化节点,遍历链表,找到该节点,删除该节点

          """

          # 实例化游标

          cur = self.head

          # 遍历链表,找到该节点

          while cur != None:

              if cur.item == item:

                  if self.head == cur:

                      self.head = cur.next

                      if cur.next:

                          cur.next.prev = None

                  else:

                      cur.prev.next = cur.next

                      # 如果有下个节点,防止最后一个节点

                      if cur.next:

                          cur.next.prev = cur.prev

                      pass

                  break

              else:

                  cur = cur.next

      # # 8. 查找节点是否存在

      def search(self, item):

          """

          查看节点是否存在

          分析

          遍历链表,查看每一个节点的数据区

          空链表

          只有头节点

          只有尾节点

          """

          # 实例化一个游标

          cur = self.head

          # 遍历链表

          while cur != None:

              if cur.item == item:

                  return True

              else:

                  cur = cur.next

          return False

  测试运行

  

# 程序的入口

  if __name__ == "__main__":

      s = Linklist()

      print(s.is_empty())  #  True

      s.append(100) 

      s.append(200)

      s.append(300)

      s.add(6)

      s.insert(1, 10)

      s.search(6)

      s.treval()   # 6 10 100 200 300 

      s.remove(100)

      s.treval()   # 6 10 200 300 

      pass

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

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

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