列表、元组、字符串是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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。