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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。