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将MongoDB里的ObjectId转换为时间戳的方法
Mar 13 Python
python模块smtplib学习
May 22 Python
python使用Matplotlib画条形图
Mar 25 Python
Python不同目录间进行模块调用的实现方法
Jan 29 Python
详解Python装饰器
Mar 25 Python
python如何获取列表中每个元素的下标位置
Jul 01 Python
python 批量修改 labelImg 生成的xml文件的方法
Sep 09 Python
简单了解python装饰器原理及使用方法
Dec 18 Python
django 扩展user用户字段inlines方式
Mar 30 Python
Python激活Anaconda环境变量的详细步骤
Jun 08 Python
简单介绍Python的第三方库yaml
Jun 18 Python
Python 中的 copy()和deepcopy()
Nov 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
解决FastCGI 进程超过了配置的活动超时时限的问题
2013/07/03 PHP
CodeIgniter框架提示Disallowed Key Characters的解决办法
2014/04/21 PHP
了解PHP的返回引用和局部静态变量
2015/06/04 PHP
ZendFramework2连接数据库操作实例
2017/04/18 PHP
php7基于递归实现删除空文件夹的方法示例
2017/06/15 PHP
JQuery 学习笔记 选择器之二
2009/07/23 Javascript
Jqyery中同等与js中windows.onload的应用
2011/05/10 Javascript
jQuery AjaxQueue改进步骤
2011/10/06 Javascript
jQuery的slideToggle方法实例
2013/05/07 Javascript
JavaScript实现url地址自动检测并添加URL链接示例代码
2013/11/12 Javascript
js使用正则实现ReplaceAll全部替换的方法
2014/08/22 Javascript
详解AngularJS中$http缓存以及处理多个$http请求的方法
2016/02/06 Javascript
基于jQuery实现仿51job城市选择功能实例代码
2016/03/02 Javascript
js前端解决跨域问题的8种方案(最新最全)
2016/11/18 Javascript
JavaScript正则表达式简单实用实例
2017/06/23 Javascript
使用JavaScript实现链表的数据结构的代码
2017/08/02 Javascript
Vue导出json数据到Excel电子表格的示例
2017/12/04 Javascript
浅谈 Vue 项目优化的方法
2017/12/16 Javascript
vue实现学生录入系统之添加删除功能
2018/07/11 Javascript
Vue2.5学习笔记之如何在项目中使用和配置Vue
2018/09/26 Javascript
vue中tab选项卡的实现思路
2018/11/25 Javascript
vue.js封装switch开关组件的操作
2020/10/26 Javascript
微信小程序实现列表左右滑动
2020/11/19 Javascript
[28:07]完美世界DOTA2联赛PWL S3 Phoenix vs INK ICE 第二场 12.13
2020/12/17 DOTA
Linux下Python获取IP地址的代码
2014/11/30 Python
Python实现的HTTP并发测试完整示例
2020/04/23 Python
Tensorflow使用支持向量机拟合线性回归
2018/09/07 Python
Scrapy框架使用的基本知识
2018/10/21 Python
django foreignkey(外键)的实现
2019/07/29 Python
在django模板中实现超链接配置
2019/08/21 Python
CSS3 实用技巧:实现黑白图像效果示例代码
2013/07/11 HTML / CSS
小学新教师培训方案
2014/02/03 职场文书
2014年网络管理员工作总结
2014/12/01 职场文书
酒店人事专员岗位职责
2015/04/07 职场文书
2015年妇产科工作总结
2015/05/18 职场文书
消防宣传标语大全
2015/08/03 职场文书