列表、元组、字符串是Python的 (有序-无序)序列,字符串属于python有序序列,和列表

  列表、元组、字符串是Python的 (有序?无序)序列,字符串属于python有序序列,和列表

  在介绍链表之前,我们先了解一下什么是链表。

  基本数据结构讨论了Python列表实现所表示的抽象数据类型。List是一个强大而简单的集合机制,为程序员提供了各种操作。然而,并不是所有的编程语言都包含列表集。在这些情况下,列表的概念必须由程序员来实现。

  是列表项的集合,每个项都保持其相对于其他项的位置。更具体地说,这种类型的列表称为无序列表。该列表可以被认为具有第一、第二、第三等。您也可以浏览列表的开头(第一个项目)或列表的结尾(最后一个项目)。为简单起见,我们假设列表不能包含重复项。

  例如,整数54、26、93、17、77和31的集合可以表示简单的无序的考试分数列表。请用逗号分隔这些。这是列表结构的一般方法。当然,Python将这个列表显示为[54,26,93,17,77,31]。

  1无序列表抽象数据类型

  如上所述,无序列表的结构是项目的集合,每个项目都保持其相对于其他项目的位置。以下是可能的无序列表操作:

  List))创建一个新的空列表。不需要任何参数。返回一个空列表。

  Add(item)向列表中添加新项目。Item是必需的参数,不返回任何内容。假设这个项目不在列表中。

  Remove(item)从列表中删除项目。您需要使用item作为参数来修改列表。假设列表中存在该项目。

  Search (item)在列表中搜索项目。Item需要作为参数,并返回一个布尔值。

  IsEmpty))检查列表是否为空。不需要任何参数。返回一个布尔值。

  Size))返回列表中的项目数。不需要任何参数。返回一个整数。

  Append(item)将新项添加到列表的末尾,使其成为集合中的最后一项。需要项目

  作为参数,不返回任何内容。假设这个项目不在列表中。

  Index(item)返回项目在列表中的位置。Item作为参数是必需的,并且返回索引。假设这个项目在列表中。

  Insert(pos,item)在列表中的位置pos处添加一个新条目。Item是必需的参数,不返回任何内容。假设该商品不在列表中,并且现有商品具有足够的pos位置。

  Pop))将被删除,并将返回列表中的最后一项。假设列表中至少有一个项目。

  并删除弹出(公布)位置公布项。需要pos作为参数,并返回一个条目。假设这个项目在列表中。

  2 python实现了无序列表

  为了实现无序列表,构建一个众所周知的链表。外部引用通常被称为链表的开始。

  2.1节点类

  节点是链表实现的基本结构,由列表项(项、数据字段)和对以下节点的引用组成:节点类包含访问、修改数据、访问以下引用等常用方法。该类的代码如下所示。

  类节点:

  def __init__(self,initdata):

  self.data=initdata

  self.next=无

  获取数据(自己):

  返回自我数据

  获得下一步(自我):

  回归自我,下一个

  defsetdata(self,newdata):

  self.data=newdata

  defsetnext(self,newnext):

  self.next=newnext

  创建节点对象

  温度=节点(93)

  Python引用值None在节点类和链表本身起着重要的作用。对None的引用意味着没有以下节点:注意,对于构造函数,最初创建的节点next被设置为None。因为这有时被称为接地节点,所以使用标准接地符号来表示没有接地,如下图所示。

  2.2未排序的列表类

  如上所述,无序列表是由一组节点构建的,每个节点都通过显式引用链接到下一个节点。如果您知道在哪里可以找到第一个节点(包括第一个项目),您可以通过按顺序浏览下一个链接来找到每个后续项目。因此,UnorderedList类必须保留对第一个节点的引用,如下图所示。实现应该如下所示:

  类无序列表:

  def __init__(self):

  self.head=无

  efisempty(自我) :

  返回self.head==None

  默认添加(自身,项目) :

  Temp=节点(项目)

  #更改新节点的下一个引用,以引用旧链表中的第一个节点

  temp.setnext(self.head)).

  #赋值语句设置列表的开头

  可动的

  f .水头=温度

  #访问和赋值的顺序不能颠倒,因为head是链表节点唯一的外部引用。反转会导致原有节点全部丢失,无法再次访问。

  定义大小(自身):

  当前=自身. head

  计数=0

  当电流!=无:

  计数=计数1

  current=current.getNext()

  返回计数

  定义搜索(自身,项目):

  当前=自身. head

  发现=假

  当电流!=无且未找到:

  if current.getData()==item:

  发现=真

  否则:

  current=current.getNext()

  发现退货

  定义移除(自身,项目):

  当前=自身. head

  先前=无

  发现=假

  找不到时:

  if current.getData()==item:

  发现=真

  #previous必须首先将一个节点移动到当前位置。此时,您可以移动电流。

  否则:

  先前=当前

  current=current.getNext()

  #如果要删除的项目恰好是链表中的第一个项目,则需要更改链表的头

  如果previous==None:

  self.head=current.getNext()

  否则:

  previous . set next(current . get next())

  2.2.1添加功能

  链表结构只给我们提供了一个入口点,即链表的头部。所有其他节点只能通过访问第一个节点,然后跟随下一个链接才能到达。这意味着最容易添加新节点的地方是链表的头部。换句话说,我们把新的条目作为链表中的第一个条目,现有的条目将需要在这个新条目之后被链接。

  2.2.2链表遍历技术——size,search,remove方法

  尺寸法的实现思路如下:

  remove方法的实现思想如下:

  remove方法需要两个逻辑步骤。

  第一步是搜索,第二步是删除。

  但当前实际上是指目标节点的引用,直接删除会删除前一个节点,所以引入了前一个外部引用。

  参考号:《problem-solving-with-algorithms-and-data-structure-using-python》

  http://www.pythonworks.org/pythonds

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

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