当前位置: 首页 > 后端技术 > Python

Python数据结构之链表

时间:2023-03-26 19:47:13 Python

如何创建链表?如果我们想了解链表的创建,那么我们的首要目标应该是了解什么是链表。那么说到链表就不得不提到数组,那么什么是数组呢?python中没有数组的概念,取而代之的是python中的列表和元组。那么数组有什么特点呢?在内存地址中,它的表现形式是用一块连续的空间来存放数据。这就是数组的概念。链表呢?概念链表是物理存储单元上的一种无序无顺序的存储结构,但它仍然属于线性表,因为每个节点都会存储下一个节点的next信息。单向链表的每个节点包含两部分,一部分存储data变量的数据,另一部分存储下一个节点next的位置信息。classNode():"""Nodeclass"""def__init__(self,item,next=None):self.item=itemself.next=nextclassLinkList():"""Linkedlist"""def__init__(self,node=None):self.head=nodedefis_empty(self):"""判断链表是否为空"""returnTrueifself.headelseFalsedeflength(self):"""返回链表长度"""NUM=0Node=Self.headifNode==None:ReturnNumNum+=1WhileNode.next:NODE.NEXTNUM+=1ReturnNumDefAdd(SELF,Item):"add最后"""self.head=Node(item,self.head)deftravel(self):"""遍历整个链表"""node=self.headifnode==None:nodereturn。ite)(whilenode.next:node=node.nextprint(node.item)defaddend(self,item):"""在链表末尾添加一个元素"""node=self.headifnode.==he节点:adse(item)returnwhilenode.next:node=node.nextnode.next=Node(item)definsert(self,index,item):"""Addatspecifiedposition"""ifindex==mitelf.add(Returnnode=Self.headTry:forIinRange(Index):node=node.nextnode.next=None(item,node.next)except:AsserERT“超出范围”defunde(seld,index):"""删除指定节点""ifindex==0:Self.head=Self.head.nextReturnNode=Self.headTry:forIinRange(INDEX-):node=Node.nextNodeXt=node.next.nextexcept:assert"Indexoutofrange"defsearch(self,item):"""查找节点是否存在"""index=0node=self.headnode.whileifnode.next:=item:returnindexindex+=1node=node.next返回“元素不存在”双向链表除了包含单链表的部分外,还存储了上一个节点prev的位置信息类Node():"""节点类"""def__init__(self,item,per=None,next=None):self.per=perself.item=itemself.next=nextclassLinkList():"""双链表"""def__init__(self,node=None):self.head=nodedefis_empty(self):"""判断链表是否为空"""returnTrueifself.headelseFalsedeflength(self):""""返回链表长度""num=0node=self.headifnode==None:Returnnumnum+=1Whilenode.next:node.nextnum+=1ReturnNumDefAdd(self,item):"""加入链表头部"""self.head=Node(item,next=self.head)deftravel(self):"""遍历整个链表"""node=self.headifnode==None:returnprint(node.item)whilenode.next:node=node.nextprint(node.item)defaddend(self,item):node.head如果节点==None:self.head=Node(item)returnwhilenode.next:node=node.nextnode.next=Node(item,node)definsert(self,index,item):"""在指定位置添加""if==0:Self.add(item)返回Node=Self.HeadTry:forIinRange(Index):node=node.nextnode.next=None(Item,Node,Node.next)EXCEPT:ASSERT"IndexSuperOutRemove(Self,INDEX):""""""删除指定点"""ifindex==0:Self.Head=Self.Head.nextReturnNode=Self.HeadTry:foriinRange(Index-1):node=node.nextnode.next=node.next.nextExcept:assert"indexsupersuperout"Defstay(delf):""查找查找查找节是是是是是是::::headwhilenode.next:ifnode.item==item:返回索引索引+=1node=node.nextreturn"元素不存在"循环链表链表的结构和之前一样,只是链表的最后一个next指向链表的头部,形成一个循环类Node():"""节点类"""def__init__(self,item,per=None,next=None):self.per=perself.item=itemself.next=nextclassLinkList():"""循环链表"""def__init__(self,node=None):self.head=nodedefis_empty(self):"""判断链表是否为空"""returnTrueifself.headelseFalsedeflength(self):"""返回链表长度""num=0node=self.headifnode==None:Returnnumnum+=1Whilenode.next!=self.head:node.nextnum+=1returnnumdefadd(self,item):"""添加到链表头部"""self.head=Node(item,per=self.head.per,next=self.head)deftravel(self):"""遍历整个链表""node=self.headifnode==None:ReturnPrint(node.Item)是否是node.next!=self.head:node.nextprint(nelf,item):"""在链表末尾添加一个元素"""node=Self.Headifnode==none:node=node(item)node.per=nodenode.next=nodeself.head=nodereturnwhilenode.next:node=node.next=node,node,node,node(node,node.next)definsert(self,index,item):“”“添加指定位置”。,范围从):Node=node.nextnode.next=none(item,node,node.next)Except:assert"indexsuper-out"defremove(Self,Index):""""""""""""""""""""""0:Self.Head=Self.Head.nextReturnNode=Self.HeadTry:forIIInRange(Index-1):node=node.nextnode.next=node.next.next.per=node.per=node=node.per=node.per=node.per=node.next.per=node.next.per=node.除了:断言“索引超级存在”defsearch(self,item):“”"""Index=0Node=Self.headWhileNode.next:ifNode.item==Item:ReturnIndex+=1Node.nextReturn"链表不存在,即解释,创建

最新推荐
猜你喜欢