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实现BackPropagation算法
Dec 14 Python
python中正则表达式的使用方法
Feb 25 Python
在python中使用requests 模拟浏览器发送请求数据的方法
Dec 26 Python
解决pyinstaller打包pyqt5的问题
Jan 08 Python
Python 互换字典的键值对实例
Feb 12 Python
python3转换code128条形码的方法
Apr 17 Python
使用Python制作表情包实现换脸功能
Jul 19 Python
python根据时间获取周数代码实例
Sep 30 Python
基于python监控程序是否关闭
Jan 14 Python
Python之字典添加元素的几种方法
Sep 30 Python
Python collections模块的使用方法
Oct 09 Python
pycharm 多行批量缩进和反向缩进快捷键介绍
Jan 15 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 Session机制简介及用法
2014/08/19 PHP
深入浅析yii2-gii自定义模板的方法
2016/04/26 PHP
PHP单例模式与工厂模式详解
2017/08/29 PHP
textContent在Firefox下与innerText等效的属性
2007/05/12 Javascript
javascript复制粘贴与clipboardData的使用
2014/10/16 Javascript
jQuery中:gt选择器用法实例
2014/12/29 Javascript
node.js实现快速截图
2016/08/27 Javascript
在html中引入外部js文件,并调用带参函数的方法
2016/10/31 Javascript
详解用webpack把我们的业务模块分开打包的方法
2017/07/20 Javascript
在Swiper内如何制作CSS3动画效果示例代码
2017/12/07 Javascript
详解基于vue-cli配置移动端自适应
2018/01/13 Javascript
Vue实现动态添加或者删除对象和对象数组的操作方法
2018/09/21 Javascript
封装一下vue中的axios示例代码详解
2020/02/16 Javascript
基于vue和bootstrap实现简单留言板功能
2020/05/30 Javascript
基于小程序请求接口wx.request封装的类axios请求
2020/07/02 Javascript
[41:13]完美世界DOTA2联赛PWL S2 Forest vs Rebirth 第一场 11.20
2020/11/20 DOTA
python @property的用法及含义全面解析
2018/02/01 Python
python调用c++ ctype list传数组或者返回数组的方法
2019/02/13 Python
Python字符串通过'+'和join函数拼接新字符串的性能测试比较
2019/03/05 Python
基于python检查矩阵计算结果
2020/05/21 Python
用python爬虫批量下载pdf的实现
2020/12/01 Python
BCBG官网:BCBGMAXAZRIA
2017/12/29 全球购物
西部世纪.net笔试题面试题
2014/04/03 面试题
提高EJB性能都有哪些技巧
2012/03/25 面试题
工程招投标邀请书
2014/01/26 职场文书
九年级科学教学反思
2014/01/29 职场文书
西式结婚主持词
2014/03/14 职场文书
银行职员工作失误检讨书
2014/10/14 职场文书
大班下学期个人总结
2015/02/13 职场文书
关于公司年会的开幕词
2016/03/04 职场文书
商业计划书之服装
2019/09/09 职场文书
《鲁滨逊漂流记》之六读后感(4篇)
2019/09/29 职场文书
自定义函数实现单词排序并运用于PostgreSQL(实现代码)
2021/04/22 PostgreSQL
PyQt5爬取12306车票信息程序的实现
2021/05/14 Python
Redis基于Bitmap实现用户签到功能
2021/06/20 Redis
《废话连篇——致新手》——chinapizza
2022/04/05 无线电