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不带重复的全排列代码
Aug 13 Python
Python中用于返回绝对值的abs()方法
May 14 Python
Python之父谈Python的未来形式
Jul 01 Python
Python统计python文件中代码,注释及空白对应的行数示例【测试可用】
Jul 25 Python
用Python写一个模拟qq聊天小程序的代码实例
Mar 06 Python
Python-Tkinter Text输入内容在界面显示的实例
Jul 12 Python
python爬取盘搜的有效链接实现代码
Jul 20 Python
numpy库reshape用法详解
Apr 19 Python
深入了解Python 方法之类方法 & 静态方法
Aug 17 Python
VSCode中autopep8无法运行问题解决方案(提示Error: Command failed,usage)
Mar 02 Python
Python并发编程实例教程之线程的玩法
Jun 20 Python
pytorch中的 .view()函数的用法介绍
Mar 17 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递归实现无限分类 格式化数组的详解
2013/06/08 PHP
php文件缓存类汇总
2014/11/21 PHP
PHP使用Memcache时模拟命名空间及缓存失效问题的解决
2016/02/27 PHP
JS 去前后空格大全(IE9亲测)
2013/07/15 Javascript
基于javascript显示当前时间以及倒计时功能
2016/03/18 Javascript
Angularjs实现mvvm式的选项卡示例代码
2016/09/08 Javascript
js图片切换具体实现代码
2016/10/13 Javascript
DropDownList控件绑定数据源的三种方法
2016/12/24 Javascript
荐书|您有一份JavaScript书单待签收
2017/07/21 Javascript
微信小程序分享功能之按钮button 边框隐藏和点击隐藏
2018/06/14 Javascript
vue router 组件的高级应用实例代码
2019/04/08 Javascript
JavaScript实现随机点名程序
2020/03/25 Javascript
JavaScript onclick事件使用方法详解
2020/05/15 Javascript
js实现滑动滑块验证登录
2020/07/24 Javascript
微信小程序实现多行文字滚动
2020/11/18 Javascript
浅谈python字符串方法的简单使用
2016/07/18 Python
Python如何抓取天猫商品详细信息及交易记录
2018/02/23 Python
pthon贪吃蛇游戏详细代码
2019/01/27 Python
python django框架中使用FastDFS分布式文件系统的安装方法
2019/06/10 Python
django基于restframework的CBV封装详解
2019/08/08 Python
如何更改 pandas dataframe 中两列的位置
2019/12/27 Python
如何利用python读取micaps文件详解
2020/10/18 Python
Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告
2021/01/27 Python
多视角3D可旋转的HTML5 Logo动画
2016/03/02 HTML / CSS
Zooplus葡萄牙:欧洲领先的网上宠物商店
2018/07/01 全球购物
土木工程专业个人求职信
2013/12/30 职场文书
中班中秋节活动反思
2014/02/18 职场文书
消防安全责任书范本
2014/04/15 职场文书
感谢信怎么写
2015/01/21 职场文书
聘任合同书
2015/09/21 职场文书
2016三八妇女节校园广播稿
2015/12/17 职场文书
2016年习总书记讲话学习心得体会
2016/01/20 职场文书
导游词幽默开场白
2019/06/26 职场文书
如何撰写创业策划书
2019/06/27 职场文书
浅谈JS的二进制家族
2021/05/09 Javascript
从np.random.normal()到正态分布的拟合操作
2021/06/02 Python