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 相关文章推荐
django文档学习之applications使用详解
Jan 29 Python
Python基于Floyd算法求解最短路径距离问题实例详解
May 16 Python
Python实现的文轩网爬虫完整示例
May 16 Python
Django框架搭建的简易图书信息网站案例
May 25 Python
Django自定义用户登录认证示例代码
Jun 30 Python
opencv转换颜色空间更改图片背景
Aug 20 Python
Python 解码Base64 得到码流格式文本实例
Jan 09 Python
python 实现两个npy档案合并
Jul 01 Python
Python3.8安装Pygame教程步骤详解
Aug 14 Python
属性与 @property 方法让你的python更高效
Sep 21 Python
关于python爬虫应用urllib库作用分析
Sep 04 Python
pycharm无法安装cv2模块问题
May 20 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统计目录下的文件总数及代码行数(去除注释及空行)
2011/01/17 PHP
rrmdir php中递归删除目录及目录下的文件
2011/05/15 PHP
PHP array操作10个小技巧分享
2011/06/23 PHP
PHP读取文件并可支持远程文件的代码分享
2012/10/03 PHP
PHP的PSR规范中文版
2013/09/28 PHP
win7安装php框架Yii的方法
2016/01/25 PHP
JavaScript语言中的Literal Syntax特性分析
2007/03/08 Javascript
js解析xml字符串和xml文档实现原理及代码(针对ie与火狐)
2013/02/02 Javascript
javascript相等运算符与等同运算符详细介绍
2013/11/09 Javascript
javascript 模拟坦克大战游戏(html5版)附源码下载
2014/04/08 Javascript
js获取数组的最后一个元素
2015/04/14 Javascript
cocos2dx骨骼动画Armature源码剖析(三)
2015/09/08 Javascript
js继承实现方法详解
2016/12/16 Javascript
超简单的Vue.js环境搭建教程
2017/03/17 Javascript
微信小程序点击顶部导航栏切换样式代码实例
2019/11/12 Javascript
微信小程序pinker组件使用实现自动相减日期
2020/05/07 Javascript
Python下的Mysql模块MySQLdb安装详解
2014/04/09 Python
Python入门篇之文件
2014/10/20 Python
Python中使用ElementTree解析XML示例
2015/06/02 Python
Python 实现链表实例代码
2017/04/07 Python
Python cookbook(数据结构与算法)保存最后N个元素的方法
2018/02/13 Python
Python在groupby分组后提取指定位置记录方法
2018/04/20 Python
解决python 找不到module的问题
2020/02/12 Python
世界上最大的在线学习和教学市场:Udemy
2017/11/08 全球购物
捷克钓鱼用品网上商店:Parys.cz
2018/06/15 全球购物
迪卡侬(Decathlon)加拿大官网:源自法国的运动专业超市
2020/11/22 全球购物
医药销售求职信范文
2014/02/01 职场文书
四风存在的原因分析
2014/02/11 职场文书
2014年社区学雷锋活动总结
2014/03/09 职场文书
扩大国家免疫规划实施方案
2014/03/21 职场文书
我与祖国共奋进演讲稿
2014/09/13 职场文书
2015年城管个人工作总结范文
2015/04/20 职场文书
党支部综合考察意见
2015/06/01 职场文书
车间班组长竞聘书
2015/09/15 职场文书
基于Redis过期事件实现订单超时取消
2021/05/08 Redis
Android开发之底部导航栏的快速实现
2022/04/28 Java/Android