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 re正则表达式模块(Regular Expression)
Jul 16 Python
python使用webbrowser浏览指定url的方法
Apr 04 Python
探索Python3.4中新引入的asyncio模块
Apr 08 Python
Python保存MongoDB上的文件到本地的方法
Mar 16 Python
浅谈python中的实例方法、类方法和静态方法
Feb 17 Python
启动Atom并运行python文件的步骤
Nov 09 Python
Python数据分析:手把手教你用Pandas生成可视化图表的教程
Dec 15 Python
python给微信好友定时推送消息的示例
Feb 20 Python
python中sort和sorted排序的实例方法
Aug 26 Python
浅谈Python访问MySQL的正确姿势
Jan 07 Python
最新PyCharm 2020.2.3永久激活码(亲测有效)
Nov 26 Python
Python爬虫之Selenium实现窗口截图
Dec 04 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 验证码制作(网树注释思想)
2009/07/20 PHP
php弹出对话框实现重定向代码
2014/01/23 PHP
使用php清除bom示例
2014/03/03 PHP
PHP+Mysql+jQuery实现发布微博程序 php篇
2015/10/15 PHP
ThinkPHP下表单令牌错误与解决方法分析
2017/05/20 PHP
PHP Socket网络操作类定义与用法示例
2017/08/30 PHP
Mootools 1.2教程 类(一)
2009/09/15 Javascript
jquery实现带渐变淡入淡出并向右依次展开的多级菜单效果实例
2015/08/22 Javascript
JS实现选中当前菜单后高亮显示的导航条效果
2015/10/15 Javascript
轻松学习jQuery插件EasyUI EasyUI表单验证
2015/12/01 Javascript
jQuery实现伪分页的方法分享
2016/02/17 Javascript
jquery获取img的src值的简单实例
2016/05/17 Javascript
基于JS实现横线提示输入验证码随验证码输入消失(js验证码的实现)
2016/10/27 Javascript
Bootstrap下拉菜单Dropdowns的实现代码
2017/03/17 Javascript
详解angular2实现ng2-router 路由和嵌套路由
2017/03/24 Javascript
vue系列之动态路由详解【原创】
2017/09/10 Javascript
JS使用tofixed与round处理数据四舍五入的区别
2017/10/25 Javascript
Vue.js实现列表清单的操作方法
2017/11/15 Javascript
详解Angular调试技巧之报错404(not found)
2018/01/31 Javascript
原生js代码能实现call和bind吗
2019/07/31 Javascript
JavaScript中变量提升机制示例详解
2019/12/27 Javascript
WebPack工具运行原理及入门教程
2020/12/02 Javascript
[01:03:18]DOTA2-DPC中国联赛 正赛 RNG vs Dynasty BO3 第一场 1月29日
2021/03/11 DOTA
盘点提高 Python 代码效率的方法
2014/07/03 Python
python实现简单socket程序在两台电脑之间传输消息的方法
2015/03/13 Python
在Python的Flask框架下收发电子邮件的教程
2015/04/21 Python
Python使用gRPC传输协议教程
2018/10/16 Python
Python2和Python3中urllib库中urlencode的使用注意事项
2018/11/26 Python
通过cmd进入python的实例操作
2019/06/26 Python
解决Alexnet训练模型在每个epoch中准确率和loss都会一升一降问题
2020/06/17 Python
python3中TQDM库安装及使用详解
2020/11/18 Python
Canvas与图片压缩的示例代码
2017/11/28 HTML / CSS
采购主管的岗位职责
2013/12/17 职场文书
班主任开场白
2015/06/01 职场文书
2016年大学生就业指导课心得体会
2015/10/09 职场文书
Python函数式编程中itertools模块详解
2021/09/15 Python