【391】栈与队列,Python实现
参考:python实现stack(栈)和队列(queue) - hjhmpl123的博客 - CSDN博客
栈和队列是两种基本的数据结构,同为容器类型。两者根本的区别在于:
stack:后进先出(迷宫所有路径)
栈示意图
queue:先进先出
队列示意图
注意,stack和queue是没有查询具体某一个位置的元素的操作的。但是他们的排列是按顺序的
对于stack我们可以使用python内置的list实现,因为list是属于线性数组,在末尾插入和删除一个元素所使用的时间都是O(1),这非常符合stack的要求。当然,我们也可以使用链表来实现。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | class Stack( object ): def __init__( object ): self .stack = [] def push( self , value): self .stack.append(value) def pop( self ): if self .stack: self .stack.pop() else : raise LookupError( 'stack is empty!' ) def is_empty( self ): return bool ( self .stack) def top( self ): #取出目前stack中最新的元素 return self .stack[ - 1 ] |
将列表当做堆栈使用
列表方法使得列表可以很方便的作为一个堆栈来使用,堆栈作为特定的数据结构,最先进入的元素最后一个被释放(后进先出)。用 append() 方法可以把一个元素添加到堆栈顶。用不指定索引的 pop() 方法可以把一个元素从堆栈顶释放出来。例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | >>> stack = [ 3 , 4 , 5 ] >>> stack.append( 6 ) >>> stack.append( 7 ) >>> stack [ 3 , 4 , 5 , 6 , 7 ] >>> stack.pop() 7 >>> stack [ 3 , 4 , 5 , 6 ] >>> stack.pop() 6 >>> stack.pop() 5 >>> stack [ 3 , 4 ] |
将列表当作队列使用
也可以把列表当做队列用,只是在队列里第一加入的元素,第一个取出来;但是拿列表用作这样的目的效率不高。在列表的最后添加或者弹出元素速度快,然而在列表里插入或者从头部弹出速度却不快(因为所有其他的元素都得一个一个地移动)。
1 2 3 4 5 6 7 8 9 10 | >>> from collections import deque >>> queue = deque([ "Eric" , "John" , "Michael" ]) >>> queue.append( "Terry" ) # Terry arrives >>> queue.append( "Graham" ) # Graham arrives >>> queue.popleft() # The first to arrive now leaves 'Eric' >>> queue.popleft() # The second to arrive now leaves 'John' >>> queue # Remaining queue in order of arrival deque([ 'Michael' , 'Terry' , 'Graham' ]) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
2015-04-16 【164】ALL_VIDEOS
2012-04-16 【032】Mark Zuckerberg