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 获取et和excel的版本号
Apr 09 Python
在Python中处理字符串之isdecimal()方法的使用
May 20 Python
Python 使用SMTP发送邮件的代码小结
Sep 21 Python
python 读取excel文件生成sql文件实例详解
May 12 Python
关于Python中浮点数精度处理的技巧总结
Aug 10 Python
Python从Excel中读取日期一列的方法
Nov 28 Python
Python 导入文件过程图解
Oct 15 Python
浅谈SciPy中的optimize.minimize实现受限优化问题
Feb 29 Python
python+OpenCV实现图像拼接
Mar 05 Python
Python 爬虫性能相关总结
Aug 03 Python
python 利用 PIL 将数组值转成图片的实现
Apr 12 Python
深度学习tensorflow基础mnist
Apr 14 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
How do I change MySQL timezone?
2008/03/26 PHP
php 日期和时间的处理-郑阿奇(续)
2011/07/04 PHP
PHP针对中英文混合字符串长度判断及截取方法示例
2017/03/31 PHP
实例讲解php实现多线程
2019/01/27 PHP
laravel 框架结合关联查询 when()用法分析
2019/11/22 PHP
Aster vs Newbee BO5 第一场2.19
2021/03/10 DOTA
jquery 关键字“拖曳搜索”之“拖曳”以及 图片“提示自适应放大”效果 的实现
2010/04/18 Javascript
JavaScript开发规范要求(规范化代码)
2010/08/16 Javascript
javascript操作JSON的要领总结
2012/12/09 Javascript
js获取url参数代码实例分享(JS操作URL)
2013/12/13 Javascript
JS实现仿中关村论坛评分后弹出提示效果的方法
2015/02/23 Javascript
Javascript定义类(class)的三种方法详解
2015/03/13 Javascript
jQuery实现的左右移动焦点图效果
2016/01/14 Javascript
前端主流框架vue学习笔记第一篇
2017/07/26 Javascript
微信小程序异步处理详解
2017/11/10 Javascript
vue+webpack实现异步加载三种用法示例详解
2018/04/24 Javascript
浅析vue-router原理
2018/10/19 Javascript
vue中el-upload上传图片到七牛的示例代码
2018/10/19 Javascript
Vue 实现前进刷新后退不刷新的效果
2019/06/14 Javascript
es6中Promise 对象基本功能与用法实例分析
2020/02/23 Javascript
python网络编程之读取网站根目录实例
2014/09/30 Python
python简单实现获取当前时间
2016/08/27 Python
用python实现k近邻算法的示例代码
2018/09/06 Python
python用plt画图时,cmp设置方法
2018/12/13 Python
Keras Convolution1D与Convolution2D区别说明
2020/05/22 Python
python爬虫中采集中遇到的问题整理
2020/11/27 Python
亿阳信通股份有限公司笔试题(C#)
2016/03/04 面试题
保安拾金不昧表扬信
2014/01/15 职场文书
大家检讨书5000字
2014/02/03 职场文书
委托协议书范本
2014/04/22 职场文书
年度考核个人总结
2015/03/06 职场文书
2016年高校自主招生自荐信范文
2015/03/24 职场文书
2015年护士节活动策划方案
2015/05/04 职场文书
安全教育主题班会教案
2015/08/12 职场文书
Python使用OpenCV和K-Means聚类对毕业照进行图像分割
2021/06/11 Python
Java设计模式中的命令模式
2022/04/28 Java/Android