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在Windows下安装setuptools(easy_install工具)步骤详解
Jul 01 Python
django使用图片延时加载引起后台404错误
Apr 18 Python
基于DataFrame筛选数据与loc的用法详解
May 18 Python
解决新django中的path不能使用正则表达式的问题
Dec 18 Python
Python3实现定时任务的四种方式
Jun 03 Python
python 实现的发送邮件模板【普通邮件、带附件、带图片邮件】
Jul 06 Python
python Gunicorn服务器使用方法详解
Jul 22 Python
TensorFlow基本的常量、变量和运算操作详解
Feb 03 Python
Python3+selenium实现cookie免密登录的示例代码
Mar 18 Python
Python图片处理模块PIL操作方法(pillow)
Apr 07 Python
Python 输出详细的异常信息(traceback)方式
Apr 08 Python
解决import tensorflow as tf 出错的原因
Apr 16 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乱码问题,UTF-8乱码常见问题小结
2012/04/09 PHP
PHP中date与gmdate的区别及默认时区设置
2014/05/12 PHP
浅谈Laravel中的一个后期静态绑定
2017/08/11 PHP
css3实现背景模糊的三种方式
2021/03/09 HTML / CSS
如何快速的呈现我们的网页的技巧整理
2007/07/01 Javascript
Javascript 调试利器 Firebug使用详解六
2009/07/05 Javascript
js实现的真正的iframe高度自适应(兼容IE,FF,Opera)
2010/03/07 Javascript
基于jQuery的淡入淡出可自动切换的幻灯插件打包下载
2010/09/15 Javascript
尝试在让script的type属性等于text/html
2013/01/15 Javascript
把input初始值不写value的具体实现方法
2013/07/04 Javascript
jQuery使用fadeout实现元素渐隐效果的方法
2015/03/27 Javascript
JQuery查找DOM节点的方法
2015/06/11 Javascript
JS随机洗牌算法之数组随机排序
2016/03/23 Javascript
关于验证码在IE中不刷新的快速解决方法
2016/09/23 Javascript
jQuery插件form-validation-engine正则表达式操作示例
2017/02/09 Javascript
ES6新数据结构Set与WeakSet用法分析
2017/03/31 Javascript
ztree实现权限横向显示功能
2017/05/20 Javascript
详解vue-cli快速构建vue应用并实现webpack打包
2017/12/13 Javascript
详解vue+webpack+express中间件接口使用
2018/07/17 Javascript
python发腾讯微博代码分享
2014/01/10 Python
Python的函数嵌套的使用方法
2014/01/24 Python
Python中装饰器兼容加括号和不加括号的写法详解
2017/07/05 Python
python导入csv文件出现SyntaxError问题分析
2017/12/15 Python
Python 中Pickle库的使用详解
2018/02/24 Python
Python中常用的8种字符串操作方法
2019/05/06 Python
Python基础学习之时间转换函数用法详解
2019/06/18 Python
python打开使用的方法
2019/09/30 Python
Django使用消息提示简单的弹出个对话框实例
2019/11/15 Python
浅谈Django QuerySet对象(模型.objects)的常用方法
2020/03/28 Python
Python网络爬虫四大选择器用法原理总结
2020/06/01 Python
收款授权委托书
2014/10/02 职场文书
2015年远程教育工作总结
2015/05/20 职场文书
2016年中秋节晚会领导致辞
2015/11/26 职场文书
javascript代码简写的几种常用方式汇总
2021/08/23 Javascript
十大冰系宝可梦排名,颜值最高的阿罗拉九尾,第三使用率第一
2022/03/18 日漫
Windows Server 2012配置DNS服务器的方法
2022/04/29 Servers