python中实现栈的三种方法


Posted in Python onDecember 19, 2020

栈是一种线性数据结构,用先进后出或者是后进先出的方式存储数据,栈中数据的插入删除操作都是在栈顶端进行,常见栈的函数操作包括

  • empty() ? 返回栈是否为空 ? Time Complexity : O(1)
  • size() ? 返回栈的长度 ? Time Complexity : O(1)
  • top() ? 查看栈顶元素 ? Time Complexity : O(1)
  • push(g) ? 向栈顶添加元素 ? Time Complexity : O(1)
  • pop() ? 删除栈顶元素 ? Time Complexity : O(1)

python中栈可以用以下三种方法实现:

1)list

2)collections.deque

3)queue.LifoQueue

使用列表实现栈

python的内置数据结构list可以用来实现栈,用append()向栈顶添加元素, pop() 可以以后进先出的顺序删除元素

但是列表本身有一些缺点,主要问题就是当列表不断扩大的时候会遇到速度瓶颈.列表是动态数组,因此往其中添加新元素而没有空间保存新的元素时,它会自动重新分配内存块,并将原来的内存中的值复制到新的内存块中.这就导致了一些append()操作会消耗更多的时间

>>> stack = []
>>> #append() fuction to push
... #element in list
... 
>>> stack.append('hello')
>>> stack.append('world')
>>> stack.append('!')
>>> print('Initial stack')
Initial stack
>>> print(stack)
['hello', 'world', '!']
>>> #pop() function to pop element
... #from stack in LIFO order
... 
>>> print('\nElement poped from stack')

Element poped from stack

>>> print(stack.pop())
!
>>> print(stack.pop())
world
>>> print(stack.pop())
hello
>>> print('\nStack after all elements are poped')

Stack after all elements are poped
>>> print(stack)
[]

使用collections.deque实现栈

python中栈也可以用deque类实现,当我们想要在实现在容器两端更快速地进行append和pop操作时,deque比列表更合适.deque可以提供O(1)时间的append和pop操作,而列表则需要O(n)时间.

>>> from collections import deque
>>> stack = deque()
>>> # append() fuction to push
... #element in list
... 
>>> stack.append('hello')
>>> stack.append('world')
>>> stack.append('!')
>>> print('Initial stack')
Initial stack
>>> print(stack)
deque(['hello', 'world', '!'])
>>> #pop() function to pop element
... #from stack in LIFO order
... 
>>> print('\nElement poped from stack')

Element poped from stack
>>> print(stack.pop())
!
>>> print(stack.pop())
world
>>> print(stack.pop())
hello
>>> print('\nStack after all elements are poped')

Stack after all elements are poped
>>> print(stack)deque([])

使用queue module实现栈

Queue模块有LIFO queue,也就是栈结构.用put()和get()操作从Queue中添加和获得数据

>>> from queue import LifoQueue
>>> stack = LifoQueue(maxsize = 3)
>>> print(stack.qsize())
0
>>> stack.put('hello')
>>> stack.put('world')
>>> stack.put('!')
>>> print('\nElement poped from stack')

Element poped from stack
>>> print(stack.get())
!
>>> print(stack.get())
world
>>> print(stack.get())
hello
>>> print('\nEmpty:', stack.empty())

Empty: True

以上就是python中实现栈的三种方法的详细内容,更多关于python 实现栈的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python中处理字符串的相关的len()方法的使用简介
May 19 Python
Python 2与Python 3版本和编码的对比
Feb 14 Python
Python简单的制作图片验证码实例
May 31 Python
python中使用xlrd读excel使用xlwt写excel的实例代码
Jan 31 Python
Python基于Flask框架配置依赖包信息的项目迁移部署
Mar 02 Python
对Python的多进程锁的使用方法详解
Feb 18 Python
Python使用dict.fromkeys()快速生成一个字典示例
Apr 24 Python
python3的数据类型及数据类型转换实例详解
Aug 20 Python
python Plotly绘图工具的简单使用
Mar 03 Python
Matplotlib自定义坐标轴刻度的实现示例
Jun 18 Python
pycharm实现猜数游戏
Dec 07 Python
Pandas中两个dataframe的交集和差集的示例代码
Dec 13 Python
python中实现词云图的示例
Dec 19 #Python
python 实现图片批量压缩的示例
Dec 18 #Python
python 基于opencv实现高斯平滑
Dec 18 #Python
python爬取代理ip的示例
Dec 18 #Python
用Python 执行cmd命令
Dec 18 #Python
Django用内置方法实现简单搜索功能的方法
Dec 18 #Python
Django解决frame拒绝问题的方法
Dec 18 #Python
You might like
PHP+MYSQL的文章管理系统(二)
2006/10/09 PHP
php防止sql注入代码实例
2013/12/18 PHP
php版小黄鸡simsimi聊天机器人接口分享
2014/01/26 PHP
PHP自带ZIP压缩、解压缩类ZipArchiv使用指南
2015/03/03 PHP
php使用array_search函数实现数组查找的方法
2015/06/12 PHP
PHP开发制作一个简单的活动日程表Calendar
2016/06/20 PHP
Mootools 1.2教程 输入过滤第一部分(数字)
2009/09/15 Javascript
jQuery Dialog 弹出层对话框插件
2010/08/09 Javascript
Js与下拉列表处理问题解决
2014/02/13 Javascript
javascript实现炫酷的拖动分页
2015/05/11 Javascript
Node.js中的process.nextTick使用实例
2015/06/25 Javascript
jQuery实现获取table表格第一列值的方法
2016/03/01 Javascript
Angular2学习教程之ng中变更检测问题详解
2017/05/28 Javascript
Vue递归组件+Vuex开发树形组件Tree--递归组件的简单实现
2019/04/01 Javascript
vue-router结合vuex实现用户权限控制功能
2019/11/14 Javascript
vant picker+popup 自定义三级联动案例
2020/11/04 Javascript
[03:24][TI9纪实] Dota奶爸
2019/08/22 DOTA
python引入导入自定义模块和外部文件的实例
2017/07/24 Python
python中hashlib模块用法示例
2017/10/30 Python
详解python异步编程之asyncio(百万并发)
2018/07/07 Python
python2与python3共存问题的解决方法
2018/09/18 Python
python3 反射的四种基本方法解析
2019/08/26 Python
python使用配置文件过程详解
2019/12/28 Python
Python调用ffmpeg开源视频处理库,批量处理视频
2020/11/16 Python
结合 CSS3 transition transform 实现简单的跑马灯效果的示例
2018/02/07 HTML / CSS
PAUL HEWITT手表美国站:德国北部时尚生活配饰品牌,船锚元素
2017/11/18 全球购物
英国邮购活的植物主要供应商:Gardening Direct
2019/01/28 全球购物
Nebula美国官网:便携式投影仪
2019/03/15 全球购物
HQhair美国/加拿大:英国化妆品、美容及美发产品商城
2019/04/15 全球购物
社会实践的活动方案
2014/08/22 职场文书
税务干部群众路线教育实践活动对照检查材料
2014/09/20 职场文书
上班时间打瞌睡检讨书
2014/09/26 职场文书
学生逃课检讨书1000字
2014/10/20 职场文书
机关干部四风问题自我剖析及整改措施
2014/10/26 职场文书
煤矿安全保证书
2015/02/27 职场文书
导游词之藏龙百瀑景区
2019/12/30 职场文书