Python实现栈和队列的简单操作方法示例
本文实例讲述了Python实现栈和队列的简单操作方法。分享给大家供大家参考,具体如下:
先简单的了解一下数据结构里面的栈和堆:
栈和队列是两种基本的数据结构,同为容器类型。两者根本的区别在于:
stack:后进先出
queue:先进先出
stack和queue是不能通过查询具体某一个位置的元素而进行操作的。但是他们的排列是按顺序的
对于stack我们可以使用python内置的list实现,因为list是属于线性数组,在末尾插入和删除一个元素所使用的时间都是O(1),这非常符合stack的要求。当然,我们也可以使用链表来实现。
stack的实现代码(使用python内置的list),实现起来是非常的简单,就是list的一些常用操作
classStack(object): def__init__(self): self.stack=[] defpush(self,value):#进栈 self.stack.append(value) defpop(self):#出栈 ifself.stack: self.stack.pop() else: raiseLookupError('stackisempty!') defis_empty(self):#如果栈为空 returnbool(self.stack) deftop(self): #取出目前stack中最新的元素 returnself.stack[-1]
我们定义如下的链表来实现队列数据结构:
定义一个头结点,左边指向队列的开头,右边指向队列的末尾,这样就可以保证我们插入一个元素和取出一个元素都是O(1)的操作,使用这种链表实现stack也是非常的方便。实现代码如下:
classHead(object): def__init__(self): self.left=None self.right=None classNode(object): def__init__(self,value): self.value=value self.next=None classQueue(object): def__init__(self): #初始化节点 self.head=Head() defenqueue(self,value): #插入一个元素 newnode=Node(value) p=self.head ifp.right: #如果head节点的右边不为None #说明队列中已经有元素了 #就执行下列的操作 temp=p.right p.right=newnode temp.next=newnode else: #这说明队列为空,插入第一个元素 p.right=newnode p.left=newnode defdequeue(self): #取出一个元素 p=self.head ifp.leftand(p.left==p.right): #说明队列中已经有元素 #但是这是最后一个元素 temp=p.left p.left=p.right=None returntemp.value elifp.leftand(p.left!=p.right): #说明队列中有元素,而且不止一个 temp=p.left p.left=temp.next returntemp.value else: #说明队列为空 #抛出查询错误 raiseLookupError('queueisempty!') defis_empty(self): ifself.head.left: returnFalse else: returnTrue deftop(self): #查询目前队列中最早入队的元素 ifself.head.left: returnself.head.left.value else: raiseLookupError('queueisempty!')
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python数据结构与算法教程》、《Python加密解密算法与技巧总结》、《Python编码操作技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》
希望本文所述对大家Python程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。