python单链表的基本操作,python实现双向链表

  python单链表的基本操作,python实现双向链表

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

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

  单向链表:所有的数据都被当作节点,所有的节点都链接在一起。每个节点分为:数据存储区和链接区。

  存储数据区:存储特定的数据。

  链接区域:指向下一个节点。

  分析实现:

  1.分析:根据链表的特点,首先要有一个存储数据的容器和一个存储节点的容器。

  2.在节点类中:应该有数据区和下一个区。

  3.在链表类中:存储所有节点。

  单链表操作

  1.链表是空的吗?

  2.链表的长度

  3.遍历链表

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

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

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

  7.删除链表中的节点。

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

  代码实现

  # Functions函数声明

  类节点():

  存储节点类

  每次调用该类时,都会实例化一个节点。

  默认情况下,每个节点中都有一个数据区和一个下一个数据区。

  数据区是数据,下一个区是空的。

  def __init__(self,item,next=None):

  self.item=项目

  self.next=下一个

  及格

  类链表():

  存储数据类别

  用于存储所有节点的容器。

  首先,默认链表是空的。这里需要有一个头节点,默认头节点是空的。

  def __init__(self,head=None):

  self.head=头

  定义为_空(自身):

  返回self.head==None

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

  将数据添加到链表的末尾

  1.实例化游标:用游标指向每个数据,检索数据,判断下一个数据是否为空。

  2.移动光标,从头节点开始,每次都用self.next移动,以为next指向下一个数据。

  3.添加数据。首先判断链表是否为空,如果是,直接将头节点等同于节点数据。

  4.如果不为空,则需要将光标从开始节点移动,以确定光标所指向的下一个节点是否为空。

  5.使用一个不断循环的移动节点,当下一个in节点为空时停止移动。

  6.骑行条件:当条件!=None,进入循环得到,cur为空时不会进入循环,所以这里用cur!=无

  #首先,您必须实例化一个节点

  节点=节点(项目)

  #如果链表为空

  if self.is_empty():

  #直接将下一个头节点添加到该节点

  self.head=node

  else:

  #实例化一个游标

  cur=self.head

  下一个!=无:

  #移动光标以获取最后一个光标的数据

  下一个

  #将下一个移动的数据添加到节点。

  cur.next=node

  及格

  定义差旅(自助):

  遍历数据

  #实例化一个游标

  cur=self.head

  #数据链路为空的情况

  if self.is_empty():

  打印()

  else:

  #获取每个数据区中的数据

  #移动光标,每次移动时输出数据区的数据。

  一边诅咒!=无:

  print(cur.item,end= )

  下一个

  打印()

  定义长度(自身):

  返回链表的长度

  #实例化光标

  cur=self

  .head

          # 计数,这里对空链表进行判断,如果是链表,则不会进入循环,直接输出 0

          count = 0

          # 移动游标,获取下一个数据,然后让count +=1

          while cur != None:

              # 计数

              count+=1

              # 移动游标

              cur = cur.next

          return count

      def add(self, item):

          """

          头部添加数据

          分析: 将数据添加到第一个节点当中

          1、 需要先将node的next指向 原第一个节点,这原第一个节点就是self.head

          2、 再讲self.head指向node进行连接

          """

          # 先实例化节点

          node = Node(item)

          # 将数据添加到头部当中

          node.next=self.head

          self.head=node

      def insert(self, index, item):

          """

          指定位置添加数据

          分析:

          1、首先要找到,该位置的数据

          2、将要添加的数据next等于 原位置的next数据

          3、原数据的 next等于node新数据

          """

          if index<=0:

              # 如果输入的索引小于或者等于O,默认使用头插发

              self.add(item)

          elif index>self.length():

              # 如果输入的索引大于链表的长度,使用尾插法

              self.append(item)

          else:

              # 实例化数据节点

              node = Node(item)

              # 找到该数据的位置

              # 实例化一个游标

              cur = self.head

              # 计数

              conent = 0

              while conent<(index-1):

                  conent+=1

                  cur = cur.next

              node.next=cur.next

              cur.next=node

      def search(self, item):

          """

          查询指定的数据是否存在

          分析: 查询指定的数据,需要对整个链表扫描,判断这个数据是否等的该节点中的数据

          """

          # 实例化一个游标

          cur = self.head

          # 进行判断是否相等

          while cur != None:

              # 判断

              if cur.item == item:

                  return True

              else:

                  cur = cur.next

              pass

          # 否则返回False

          return False

      def remove(self, item):

          """

          移除指定的数据

          分析:

          1、删除数据,需要首先判断数据是否存在

          2、找到该数据所在的位置,将该数据的上一个数据的next指向自己的next

          3、如何获取该数据的指向,和上一个数据的指向

          4、需要定义两个指针

          5、先将两个指针相等,再讲一个指针先移动一次,再同时移动

          """

          # 先找到该数据

          cur = self.head

          por = None

          while cur != None:

              if cur.item==item:

                  # 要判断是否为第一个节点

                  if cur == self.head:

                      self.head = cur.next

                  else:

                      por.next = cur.next

                  break

              else:

                  # 如果在当前节点中没有相等的,将节点进行移动

                  # 移动要注意,现将两个游标相等,再讲另一个游标移动一次

                  por = cur

                  cur = cur.next

  测试运行

  

# 程序的入口

  if __name__ == "__main__":

      s = Linklist()

      s.append(100)

      s.append(200)

      s.append(300)

      s.add(1)

      s.add(12)

      s.insert(-1,6)

      s.travel()       #  6 12 1 100 200 300 

      print(s.length())  # 6

      print(s.search(11)) # False

      s.remove(12)

      s.travel()       # 6 1 100 200 300 

      print(s.length())  # 5

      print(s.search(11)) # False

      pass

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

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

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