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多线程学习资料
Dec 19 Python
全面了解python中的类,对象,方法,属性
Sep 11 Python
Python利用matplotlib生成图片背景及图例透明的效果
Apr 27 Python
python matplotlib 注释文本箭头简单代码示例
Jan 08 Python
python实现决策树、随机森林的简单原理
Mar 26 Python
Python数据可视化 pyecharts实现各种统计图表过程详解
Aug 15 Python
np.dot()函数的用法详解
Jan 17 Python
Python实现子类调用父类的初始化实例
Mar 12 Python
Django 解决新建表删除后无法重新创建等问题
May 21 Python
Python连接HDFS实现文件上传下载及Pandas转换文本文件到CSV操作
Jun 06 Python
python上下文管理器异常问题解决方法
Feb 07 Python
手残删除python之后的补救方法
Jun 26 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
支持php4、php5的mysql数据库操作类
2008/01/10 PHP
PHP编码规范之注释和文件结构说明
2010/07/09 PHP
PHP中的生成XML文件的4种方法分享
2012/10/06 PHP
简单的pgsql pdo php操作类实现代码
2016/08/25 PHP
PHP7.1实现的AES与RSA加密操作示例
2018/06/15 PHP
PHP设计模式之建造者模式定义与用法简单示例
2018/08/13 PHP
PHP通过调用新浪API生成t.cn格式短网址链接的方法详解
2019/02/20 PHP
js获取div高度的代码
2008/08/09 Javascript
设为首页加入收藏兼容360/火狐/谷歌/IE等主流浏览器的代码
2013/03/26 Javascript
js自动下载文件到本地的实现代码
2013/04/28 Javascript
在Firefox下js select标签点击无法弹出
2014/03/06 Javascript
jquery中的常用事件bind、hover、toggle等示例介绍
2014/07/21 Javascript
JavaScript汉诺塔问题解决方法
2015/04/21 Javascript
使用AngularJS实现表单向导的方法
2015/06/19 Javascript
js使用原型对象(prototype)需要注意的地方
2017/08/28 Javascript
前端必备插件之纯原生JS的瀑布流插件Macy.js
2017/11/22 Javascript
详解nodejs 开发企业微信第三方应用入门教程
2019/03/12 NodeJs
JavaScript碎片—函数闭包(模拟面向对象)
2019/03/13 Javascript
Vue发布项目实例讲解
2019/07/17 Javascript
在vue中根据光标的显示与消失实现下拉列表
2019/09/29 Javascript
python thread 并发且顺序运行示例
2009/04/09 Python
python使用urllib模块和pyquery实现阿里巴巴排名查询
2014/01/16 Python
详解Python程序与服务器连接的WSGI接口
2015/04/29 Python
关于Python元祖,列表,字典,集合的比较
2017/01/06 Python
Python用imghdr模块识别图片格式实例解析
2018/01/11 Python
对命令行模式与python交互模式介绍
2018/05/12 Python
Python统计分析模块statistics用法示例
2019/09/06 Python
美国球鞋寄卖网站:Stadium Goods
2018/05/09 全球购物
美国Jeep配件购物网站:Morris 4×4 Center
2019/05/01 全球购物
C,C++的几个面试题小集
2013/07/13 面试题
城市轨道交通工程职业规划书范文
2014/01/18 职场文书
毕业生学校推荐信范文
2014/05/21 职场文书
遵纪守法演讲稿
2014/05/23 职场文书
会计工作态度自我评价
2015/03/06 职场文书
社区党支部公开承诺书
2015/04/29 职场文书
小学2016年“我们的节日·重阳节”活动总结
2016/04/01 职场文书