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中的文件和目录操作实现代码
Mar 13 Python
介绍Python的Django框架中的静态资源管理器django-pipeline
Apr 25 Python
python实现微信跳一跳辅助工具步骤详解
Jan 04 Python
python email smtplib模块发送邮件代码实例
Apr 26 Python
Python使用Phantomjs截屏网页的方法
May 17 Python
pyinstaller打包单个exe后无法执行错误的解决方法
Jun 21 Python
python障碍式期权定价公式
Jul 19 Python
在PyTorch中Tensor的查找和筛选例子
Aug 18 Python
python读取Excel表格文件的方法
Sep 02 Python
Python面向对象封装操作案例详解
Dec 31 Python
python实现图像拼接功能
Mar 23 Python
5 分钟读懂Python 中的 Hook 钩子函数
Dec 09 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
Extended CHM PHP 语法手册之 DIY
2006/10/09 PHP
介绍php设计模式中的工厂模式
2008/06/12 PHP
PHP中计算字符串相似度的函数代码
2012/12/29 PHP
php如何连接sql server
2015/10/16 PHP
PHP实现可自定义样式的分页类
2016/03/29 PHP
php实现生成带二维码图片并强制下载功能
2018/02/24 PHP
PHP工厂模式、单例模式与注册树模式实例详解
2019/06/03 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
2020/04/04 PHP
jQuery学习笔记之toArray()
2014/06/09 Javascript
全面解析Bootstrap表单使用方法(表单样式)
2015/11/24 Javascript
jQuery表格插件datatables用法详解
2020/11/23 Javascript
jquery淡入淡出效果简单实例
2016/01/14 Javascript
js/jquery控制页面动态加载数据 滑动滚动条自动加载事件的方法
2017/02/08 Javascript
iOS + node.js使用Socket.IO框架进行实时通信示例
2017/04/14 Javascript
关于foreach循环中遇到的问题小结
2017/05/08 Javascript
Vue组件通信的四种方式汇总
2018/02/08 Javascript
npm配置国内镜像资源+淘宝镜像的方法
2018/09/07 Javascript
解决betterScroll在vue中存在图片时,出现拉不动的问题
2018/09/27 Javascript
Vue实现移动端拖拽交换位置
2020/07/29 Javascript
js实现点击烟花特效
2020/10/14 Javascript
JS页面动态绘图工具SVG,Canvas,VML介简介
2020/10/16 Javascript
python统计字符串中指定字符出现次数的方法
2015/04/04 Python
Python3实现的字典遍历操作详解
2018/04/18 Python
TensorFlow利用saver保存和提取参数的实例
2018/07/26 Python
使用Python防止SQL注入攻击的实现示例
2020/05/21 Python
pytorch随机采样操作SubsetRandomSampler()
2020/07/07 Python
解决python 执行shell命令无法获取返回值的问题
2020/12/05 Python
巴黎卡诗美国官方网站:始于1964年的头发头皮护理专家
2017/07/10 全球购物
Viking Direct爱尔兰:办公用品和家具
2019/11/21 全球购物
电子商务专业毕业生工作推荐信
2013/11/17 职场文书
库房管理员岗位职责
2014/03/09 职场文书
2014县委书记四风对照检查材料思想汇报
2014/09/21 职场文书
2014年作风建设剖析材料
2014/10/23 职场文书
2015年工程师工作总结
2015/04/30 职场文书
聋哑人盗窃罪辩护词
2015/05/21 职场文书
Win11怎么解除儿童账号限制?Win11解除微软儿童账号限制方法
2022/07/07 数码科技