Python实现栈和队列的简单操作方法示例
作者:LuckyQueen0928 时间:2023-09-28 19:07:51
本文实例讲述了Python实现栈和队列的简单操作方法。分享给大家供大家参考,具体如下:
先简单的了解一下数据结构里面的栈和堆:
栈和队列是两种基本的数据结构,同为容器类型。两者根本的区别在于:
stack:后进先出
queue:先进先出
stack和queue是不能通过查询具体某一个位置的元素而进行操作的。但是他们的排列是按顺序的
对于stack我们可以使用python内置的list实现,因为list是属于线性数组,在末尾插入和删除一个元素所使用的时间都是O(1),这非常符合stack的要求。当然,我们也可以使用链表来实现。
stack的实现代码(使用python内置的list),实现起来是非常的简单,就是list的一些常用操作
class Stack(object):
def __init__(self):
self.stack = []
def push(self, value): # 进栈
self.stack.append(value)
def pop(self): #出栈
if self.stack:
self.stack.pop()
else:
raise LookupError('stack is empty!')
def is_empty(self): # 如果栈为空
return bool(self.stack)
def top(self):
#取出目前stack中最新的元素
return self.stack[-1]
我们定义如下的链表来实现队列数据结构:
定义一个头结点,左边指向队列的开头,右边指向队列的末尾,这样就可以保证我们插入一个元素和取出一个元素都是O(1)的操作,使用这种链表实现stack也是非常的方便。实现代码如下:
class Head(object):
def __init__(self):
self.left = None
self.right = None
class Node(object):
def __init__(self, value):
self.value = value
self.next = None
class Queue(object):
def __init__(self):
#初始化节点
self.head = Head()
def enqueue(self, value):
#插入一个元素
newnode = Node(value)
p = self.head
if p.right:
#如果head节点的右边不为None
#说明队列中已经有元素了
#就执行下列的操作
temp = p.right
p.right = newnode
temp.next = newnode
else:
#这说明队列为空,插入第一个元素
p.right = newnode
p.left = newnode
def dequeue(self):
#取出一个元素
p = self.head
if p.left and (p.left == p.right):
#说明队列中已经有元素
#但是这是最后一个元素
temp = p.left
p.left = p.right = None
return temp.value
elif p.left and (p.left != p.right):
#说明队列中有元素,而且不止一个
temp = p.left
p.left = temp.next
return temp.value
else:
#说明队列为空
#抛出查询错误
raise LookupError('queue is empty!')
def is_empty(self):
if self.head.left:
return False
else:
return True
def top(self):
#查询目前队列中最早入队的元素
if self.head.left:
return self.head.left.value
else:
raise LookupError('queue is empty!')
希望本文所述对大家Python程序设计有所帮助。
来源:https://blog.csdn.net/LuckyQueen0928/article/details/95933935
标签:Python,栈,队列
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Python中如何将Tqdm与Asyncio结合使用呢
2021-06-13 11:18:40
![](https://img.aspxhome.com/file/2023/9/134599_0s.png)
自动定时重启sql server回收内存
2008-11-26 17:41:00
Golang Gin 中间件 Next()方法示例详解
2024-02-20 07:29:22
![](https://img.aspxhome.com/file/2023/9/103059_0s.png)
Python使用crontab模块设置和清除定时任务操作详解
2023-02-07 15:13:37
![](https://img.aspxhome.com/file/2023/6/80776_0s.png)
Python中eval带来的潜在风险代码分析
2023-05-24 03:29:03
OpenCV实现机器人对物体进行移动跟随的方法实例
2023-04-20 08:50:49
![](https://img.aspxhome.com/file/2023/0/90460_0s.jpg)
利用django如何解析用户上传的excel文件
2022-04-04 04:45:20
scrapy自定义pipeline类实现将采集数据保存到mongodb的方法
2021-03-20 02:55:59
python入门学习之自带help功能初步使用示例
2021-05-27 17:07:28
详解AJAX核心 —— XMLHttpRequest 对象
2010-03-31 14:49:00
python 协程中的迭代器,生成器原理及应用实例详解
2022-09-01 07:19:56
![](https://img.aspxhome.com/file/2023/2/77032_0s.png)
使用TensorFlow搭建一个全连接神经网络教程
2023-01-10 10:59:20
![](https://img.aspxhome.com/file/2023/0/78630_0s.jpg)
SQL Server的触发器你了解多少
2024-01-14 21:15:57
asp实现ACCESS数据库加密方法
2008-04-18 12:33:00
Pytorch中关于F.normalize计算理解
2021-10-10 12:33:34
![](https://img.aspxhome.com/file/2023/6/115026_0s.png)
css+html+js实现五角星评分
2024-02-24 17:07:24
![](https://img.aspxhome.com/file/2023/5/56345_0s.jpg)
python中yield函数的用法详解
2022-03-14 13:57:13
Python深度学习pytorch神经网络汇聚层理解
2022-08-05 11:57:15
![](https://img.aspxhome.com/file/2023/3/84143_0s.png)
随Linux开机自动启动mysql
2009-12-29 10:14:00
Mysql中explain的使用详解
2009-12-08 16:18:00