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的dict,set,list,tuple应用详解
Jul 24 Python
详解Python中的join()函数的用法
Apr 07 Python
Python中MySQL数据迁移到MongoDB脚本的方法
Apr 28 Python
100行Python代码实现自动抢火车票(附源码)
Jan 11 Python
Python数据分析库pandas基本操作方法
Apr 08 Python
python递归全排列实现方法
Aug 18 Python
python3 json数据格式的转换(dumps/loads的使用、dict to str/str to dict、json字符串/字典的相互转换)
Apr 01 Python
Python多叉树的构造及取出节点数据(treelib)的方法
Aug 09 Python
Python3实现mysql连接和数据框的形成(实例代码)
Jan 17 Python
TensorFlow 多元函数的极值实例
Feb 10 Python
Python configparser模块应用过程解析
Aug 14 Python
python函数指定默认值的实例讲解
Mar 29 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
用 PHP5 轻松解析 XML
2006/12/04 PHP
PHP中基本符号及使用方法
2010/03/23 PHP
深入浅出讲解:php的socket通信原理
2016/12/03 PHP
Javascript load Page,load css,load js实现代码
2010/03/31 Javascript
Jquery中dialog属性小记
2010/09/03 Javascript
基于jquery的$.ajax async使用
2011/10/19 Javascript
jquery图片放大功能简单实现
2013/08/01 Javascript
jquery实现鼠标拖动图片效果示例代码
2014/01/09 Javascript
页面加载完毕后滚动条自动滚动一定位置
2014/02/20 Javascript
当滚动条滚动到页面底部自动加载增加内容的js代码
2014/05/13 Javascript
extjs每个组件要设置唯一的ID否则会出错
2014/06/15 Javascript
jquery滚动特效集锦
2015/06/03 Javascript
基于jQuery实现简单的折叠菜单效果
2015/11/23 Javascript
JavaScript 定时器 SetTimeout之定时刷新窗口和关闭窗口(代码超简单)
2016/02/26 Javascript
js获取时间精确到秒(年月日)
2016/03/16 Javascript
基于javascript实现泡泡大冒险网页版小游戏
2016/03/23 Javascript
js实现的页面加载完毕之前loading提示效果完整示例【附demo源码下载】
2016/08/02 Javascript
Javascript highcharts 饼图显示数量和百分比实例代码
2016/12/06 Javascript
解决bootstrap模态框数据缓存的问题方法
2018/08/10 Javascript
Windows上node.js的多版本管理工具用法实例分析
2019/11/06 Javascript
Python实现简易端口扫描器代码实例
2017/03/15 Python
python MySQLdb使用教程详解
2018/03/20 Python
对python中字典keys,values,items的使用详解
2019/02/03 Python
django 通过url实现简单的权限控制的例子
2019/08/16 Python
Python查找不限层级Json数据中某个key或者value的路径方式
2020/02/27 Python
HTML5 transform三维立方体实现360无死角三维旋转效果
2014/08/22 HTML / CSS
BIBLOO波兰:捷克的一家在线服装店
2018/03/09 全球购物
Unix如何添加新的用户
2014/08/20 面试题
综合测评自我鉴定
2013/10/08 职场文书
建议书标准格式
2014/03/12 职场文书
活动总结的格式
2014/05/07 职场文书
个人政风行风自查自纠报告
2014/10/21 职场文书
小区保洁员岗位职责
2015/04/10 职场文书
2015年大学学生会工作总结
2015/05/13 职场文书
2015年全民创业工作总结
2015/07/23 职场文书
vue 实现弹窗关闭后刷新效果
2022/04/08 Vue.js