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的源码浅要剖析Python的内存管理
Apr 16 Python
Python3使用PyQt5制作简单的画板/手写板实例
Oct 19 Python
python3.6+django2.0开发一套学员管理系统
Mar 03 Python
基于循环神经网络(RNN)实现影评情感分类
Mar 26 Python
Python高级用法总结
May 26 Python
Python中的CSV文件使用"with"语句的方式详解
Oct 16 Python
Python2和Python3中urllib库中urlencode的使用注意事项
Nov 26 Python
Python中字符串与编码示例代码
May 20 Python
如何使用Python标准库进行性能测试
Jun 25 Python
用python生成与调用cntk模型代码演示方法
Aug 26 Python
Python任务调度模块APScheduler使用
Apr 15 Python
如何使用PyCharm及常用配置详解
Jun 03 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+Ajax实现唯一校验实现代码[简单应用]
2011/11/29 PHP
PHP curl模拟登录带验证码的网站
2015/11/30 PHP
PHP获取当前执行php文件名的代码
2017/03/02 PHP
JAVASCRIPT 对象的创建与使用
2021/03/09 Javascript
JS 添加网页桌面快捷方式的代码详细整理
2012/12/27 Javascript
jQuery中 noConflict() 方法使用
2013/04/25 Javascript
jquery鼠标滑过提示title具体实现代码
2013/08/06 Javascript
jQuery选择器之基本选择器与层次选择器
2015/03/03 Javascript
javascript通过获取html标签属性class实现多选项卡的方法
2015/07/27 Javascript
JS实现的另类手风琴效果网页内容切换代码
2015/09/08 Javascript
第八篇Bootstrap下拉菜单实例代码
2016/06/21 Javascript
微信小程序 限制1M的瘦身技巧与方法详解
2017/01/06 Javascript
EasyUI修改DateBox和DateTimeBox的默认日期格式示例
2017/01/18 Javascript
深入理解Vuex 模块化(module)
2017/09/26 Javascript
js仿微信抢红包功能
2020/09/25 Javascript
利用canvas中toDataURL()将图片转为dataURL(base64)的方法详解
2017/11/20 Javascript
JavaScript生成简单等差数列
2017/11/28 Javascript
微信{"errcode":48001,"errmsg":"api unauthorized, hints: [ req_id: 1QoCla0699ns81 ]"}
2018/10/12 Javascript
element-ui的回调函数Events的用法详解
2018/10/16 Javascript
vue中轮训器的使用
2019/01/27 Javascript
Vue数据驱动表单渲染,轻松搞定form表单
2019/07/19 Javascript
微信小程序自定义头部导航栏和导航栏背景图片 navigationStyle问题
2019/07/26 Javascript
js代码实现轮播图
2020/05/04 Javascript
[01:05:59]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.22
2019/09/05 DOTA
利用Python复制文件的9种方法总结
2019/09/02 Python
在pycharm中使用matplotlib.pyplot 绘图时报错的解决
2020/06/01 Python
html5自定义video标签的海报与播放按钮功能
2019/12/04 HTML / CSS
欧洲顶级的童装奢侈品购物网站:Bambini Fashion(面向全球)
2018/04/24 全球购物
Foot Locker澳洲官网:美国运动服和鞋类零售商
2019/10/11 全球购物
质监局领导班子对照检查材料思想汇报
2014/09/27 职场文书
人事文员岗位职责
2015/02/04 职场文书
2015年电工工作总结
2015/04/10 职场文书
幼儿园班级工作总结2015
2015/05/25 职场文书
《为人民服务》教学反思
2016/02/20 职场文书
《分数的意义》教学反思
2016/02/20 职场文书
详细介绍Java中的CyclicBarrier
2022/04/13 Java/Android