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基于回溯法子集树模板解决选排问题示例
Sep 07 Python
浅谈python中的正则表达式(re模块)
Oct 17 Python
Python模糊查询本地文件夹去除文件后缀的实例(7行代码)
Nov 09 Python
Python3 读、写Excel文件的操作方法
Oct 20 Python
2019 Python最新面试题及答案16道题
Apr 11 Python
python实现图片插入文字
Nov 26 Python
Python中低维数组填充高维数组的实现
Dec 02 Python
解决tensorflow读取本地MNITS_data失败的原因
Jun 22 Python
Python Pandas数据分析工具用法实例
Nov 05 Python
python爬虫筛选工作实例讲解
Nov 23 Python
详解Python中的GIL(全局解释器锁)详解及解决GIL的几种方案
Jan 29 Python
解决hive中导入text文件遇到的坑
Apr 07 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程序的php代码
2008/04/07 PHP
php empty函数 使用说明
2009/08/10 PHP
PHP读取数据库并按照中文名称进行排序实现代码
2013/01/29 PHP
使用phpQuery采集网页的方法
2013/11/13 PHP
ThinkPHP框架搭建及常见问题(XAMPP安装失败、Apache/MySQL启动失败)
2016/04/15 PHP
CI框架常用方法小结
2016/05/17 PHP
PHP中的函数声明与使用详解
2017/05/27 PHP
Mac系统下安装PHP Xdebug
2018/03/30 PHP
PHP+MySQL实现输入页码跳转到指定页面功能示例
2018/06/01 PHP
php设计模式之职责链模式实例分析【星际争霸游戏案例】
2020/03/27 PHP
web网页按比例显示图片实现原理及js代码
2013/08/09 Javascript
jQuery中$.click()无效问题分析
2015/01/29 Javascript
jQuery插件开发的五种形态小结
2015/03/04 Javascript
JavaScript前补零操作实例
2015/03/11 Javascript
js判断上传文件后缀名是否合法
2016/01/28 Javascript
React.js入门实例教程之创建hello world 的5种方式
2016/05/11 Javascript
jQuery获取多种input值的简单实现方法
2016/06/20 Javascript
文本框只能输入数字的js代码(含小数点)
2016/07/10 Javascript
JS实现双击内容变为可编辑状态
2017/03/03 Javascript
微信小程序 页面跳转及数据传递详解
2017/03/14 Javascript
Node.js中流(stream)的使用方法示例
2017/07/16 Javascript
使用vue-route 的 beforeEach 实现导航守卫(路由跳转前验证登录)功能
2018/03/22 Javascript
Vue filter格式化时间戳时间成标准日期格式的方法
2018/09/16 Javascript
vue简单封装axios插件和接口的统一管理操作示例
2020/02/02 Javascript
使用next.js开发网址缩短服务的方法
2020/06/17 Javascript
[43:51]2018DOTA2亚洲邀请赛3月30日 小组赛B组 EG VS Secret
2018/03/31 DOTA
详解Python 序列化Serialize 和 反序列化Deserialize
2017/08/20 Python
python机器学习之神经网络(三)
2017/12/20 Python
python3 kmp 字符串匹配的方法
2018/07/07 Python
Python3 SSH远程连接服务器的方法示例
2018/12/29 Python
Python中使用gflags实例及原理解析
2019/12/13 Python
canvas仿写贝塞尔曲线的示例代码
2017/12/29 HTML / CSS
英国著名的化妆品折扣网站:Allbeauty.com
2016/07/21 全球购物
2014年度工作总结报告
2014/12/15 职场文书
使用php的mail()函数实现发送邮件功能
2021/06/03 PHP
使用Python+OpenCV进行卡类型及16位卡号数字的OCR功能
2021/08/30 Python