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命令行参数sys.argv使用示例
Jan 28 Python
用map函数来完成Python并行任务的简单示例
Apr 02 Python
python设计模式大全
Jun 27 Python
解决pyqt中ui编译成窗体.py中文乱码的问题
Dec 23 Python
Python对象类型及其运算方法(详解)
Jul 05 Python
django之session与分页(实例讲解)
Nov 13 Python
Python语言描述最大连续子序列和
Dec 05 Python
将TensorFlow的模型网络导出为单个文件的方法
Apr 23 Python
根据DataFrame某一列的值来选择具体的某一行方法
Jul 03 Python
Python利用逻辑回归模型解决MNIST手写数字识别问题详解
Jan 14 Python
Python 在函数上添加包装器
Jul 28 Python
Python中常见的导入方式总结
May 06 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的开发框架的现状和展望
2007/03/16 PHP
Eclipse中php插件安装及Xdebug配置的使用详解
2013/04/25 PHP
PHP的魔术常量__METHOD__简介
2014/07/08 PHP
PHP中使用xmlreader读取xml数据示例
2014/12/29 PHP
老版本PHP转义Json里的特殊字符的函数
2015/06/08 PHP
PHP常用文件操作函数和简单实例分析
2016/06/03 PHP
Jquery作者John Resig自己封装的javascript 常用函数
2009/11/09 Javascript
jquery ui 1.7 ui.tabs 动态添加与关闭(按钮关闭+双击关闭)
2010/04/01 Javascript
jQuery使用empty()方法删除元素及其所有子元素的方法
2015/03/26 Javascript
javascript针对cookie的基本操作实例详解
2015/11/30 Javascript
基于bootstrap实现广告轮播带图片和文字效果
2016/07/22 Javascript
jquery 正整数数字校验正则表达式
2017/01/10 Javascript
vue router2.0二级路由的简单使用
2017/07/05 Javascript
Less 安装及基本用法
2018/05/05 Javascript
vue使用Proxy实现双向绑定的方法示例
2019/03/20 Javascript
基于JavaScript获取base64图片大小
2019/10/18 Javascript
Vue+Java 通过websocket实现服务器与客户端双向通信操作
2020/09/22 Javascript
python 算法 排序实现快速排序
2012/06/05 Python
python调用Delphi写的Dll代码示例
2017/12/05 Python
简单的python协同过滤程序实例代码
2018/01/31 Python
python编程使用协程并发的优缺点
2018/09/20 Python
Python Series从0开始索引的方法
2018/11/06 Python
pip安装py_zipkin时提示的SSL问题对应
2018/12/29 Python
常用python爬虫库介绍与简要说明
2020/01/25 Python
Python使用enumerate获取迭代元素下标
2020/02/03 Python
Python数据结构dict常用操作代码实例
2020/03/12 Python
师范生自我鉴定范文
2013/10/05 职场文书
出国留学自荐信
2013/10/25 职场文书
挑战杯创业计划书的写作指南
2014/01/07 职场文书
质量月活动策划方案
2014/03/10 职场文书
优秀毕业生自荐信
2014/06/10 职场文书
民间借贷借条范本
2015/05/25 职场文书
宝葫芦的秘密观后感
2015/06/11 职场文书
繁星春水读书笔记
2015/06/30 职场文书
运动会100米广播稿
2015/08/19 职场文书
python实现简单的聊天小程序
2021/07/07 Python