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中使用PIL模块处理图像的教程
Apr 29 Python
Python利用flask sqlalchemy实现分页效果
Aug 02 Python
windows 下python+numpy安装实用教程
Dec 23 Python
Django添加favicon.ico图标的示例代码
Aug 07 Python
python爬虫爬取微博评论案例详解
Mar 27 Python
使用python实现离散时间傅里叶变换的方法
Sep 02 Python
如何获取Python简单for循环索引
Nov 21 Python
python判断无向图环是否存在的示例
Nov 22 Python
Python全面分析系统的时域特性和频率域特性
Feb 26 Python
用于ETL的Python数据转换工具详解
Jul 21 Python
Python字符串三种格式化输出
Sep 17 Python
Python Pycharm虚拟下百度飞浆PaddleX安装报错问题及处理方法(亲测100%有效)
May 24 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 strstr 函数判断字符串是否否存在的实例代码
2013/09/28 PHP
PHP判断指定时间段的2个方法
2014/03/14 PHP
一个PHP的ZIP压缩类分享
2014/05/04 PHP
php基本函数汇总
2015/07/09 PHP
PHP远程调试之XDEBUG
2015/12/29 PHP
Js如何判断客户端是PC还是手持设备简单分析
2012/11/22 Javascript
通过js获取div的background-image属性
2013/10/15 Javascript
浅析用prototype定义自己的方法
2013/11/14 Javascript
解决用jquery load加载页面到div时,不执行页面js的问题
2014/02/22 Javascript
js 动态修改css文件用到了cssRule
2014/08/20 Javascript
JQuery选择器绑定事件及修改内容的方法
2015/01/23 Javascript
js实现仿百度汽车频道选择汽车图片展示实例
2015/05/06 Javascript
Clipboard.js 无需Flash的JavaScript复制粘贴库
2015/10/02 Javascript
nodejs服务搭建教程 nodejs访问本地站点文件
2017/04/07 NodeJs
jquery 动态遍历select 赋值的实例
2018/09/12 jQuery
微信小程序实现两个页面传值的方法分析
2018/12/11 Javascript
Angular7创建项目、组件、服务以及服务的使用
2019/02/19 Javascript
微信小程序获取用户信息并保存登录状态详解
2019/05/10 Javascript
vue商城中商品“筛选器”功能的实现代码
2020/07/01 Javascript
[52:15]2014 DOTA2国际邀请赛中国区预选赛5.21 HGT VS LGD-GAMING
2014/05/23 DOTA
[02:38]2018DOTA2亚洲邀请赛赛前采访-VGJ.T
2018/04/03 DOTA
简单介绍Python的Django框架的dj-scaffold项目
2015/05/30 Python
Python插件virtualenv搭建虚拟环境
2017/11/20 Python
python微信公众号之关注公众号自动回复
2018/10/25 Python
windows下搭建python scrapy爬虫框架步骤
2018/12/23 Python
pandas.cut具体使用总结
2019/06/24 Python
python global关键字的用法详解
2019/09/05 Python
pyCharm 实现关闭代码检查
2020/06/09 Python
Python中zipfile压缩文件模块的基本使用教程
2020/06/14 Python
Python基于execjs运行js过程解析
2020/11/27 Python
详解CSS3 用border写 空心三角箭头 (两种写法)
2017/09/29 HTML / CSS
预备党员公开承诺书
2014/05/28 职场文书
努力工作保证书
2015/02/28 职场文书
2015领导干部廉洁自律工作总结
2015/07/23 职场文书
演讲稿:​快乐,从不抱怨开始!
2019/04/02 职场文书
Spring Boot DevTools 全局配置学习指南
2022/03/31 Java/Android