Python数据结构——栈、队列的实现(二)
1. 一个列表实现两个栈
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | class Twostacks( object ): def __init__( self ): self .stack = [] self .a_size = 0 self .b_size = 0 self .top = 0 def a_isEmpty( self ): return self .a_size = = 0 def a_push( self ,item): self .stack.insert( self .a_size,item) self .a_size + = 1 def a_pop( self ): if self .a_size> = 1 : item = self .stack[ self .a_size - 1 ] self .stack.remove(item) self .a_size - = 1 return item def b_isEmpty( self ): return self .b_size = = 0 def b_push( self ,item): self .stack.insert( self .a_size,item) self .b_size + = 1 def b_pop( self ): if self .b_size> = 1 : item = self .stack[ self .a_size] self .stack.remove(item) self .b_size - = 1 return item |
2. 两个栈实现一个队列
有两个栈s1,s2。入队时,将元素压入s1。出队时,判断s2是否为空,如不为空,则直接弹出顶元素;如为空,则将s1的元素逐个“倒入”s2,把最后一个元素弹出并出队。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | class Stack( object ): def __init__( self ): self .stack = [] def isEmpty( self ): return self .stack = = [] def push( self ,item): self .stack.append(item) def pop( self ): if self .isEmpty(): raise IndexError, 'pop from empty stack' return self .stack.pop() def size( self ): return len ( self .stack) class Queue_with_stacks( object ): def __init__( self ): self .stackA = Stack() self .stackB = Stack() def isEmpty( self ): return self .stackA.isEmpty() and self .stackB.isEmpty() def enqueue( self ,item): self .stackA.push(item) def dequeue( self ): if self .stackB.isEmpty(): if self .stackA.isEmpty(): raise IndexError, 'queue is empty.' while self .stackA.size()> = 2 : self .stackB.push( self .stackA.pop()) return self .stackA.pop() else : return self .stackB.pop() |
3. 两个队列实现一个栈
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | class Queue( object ): def __init__( self ): self .queue = [] def isEmpty( self ): return self .queue = = [] def enqueue( self ,x): self .queue.append(x) def dequeue( self ): if self .queue: a = self .queue[ 0 ] self .queue.remove(a) return a else : raise IndexError, 'queue is empty' def size( self ): return len ( self .queue) class Stack_with_queues( object ): def __init__( self ): self .queueA = Queue() self .queueB = Queue() def isEmpty( self ): return self .queueA.isEmpty() and self .queueB.isEmpty() def push( self ,item): if self .queueB.isEmpty(): self .queueA.enqueue(item) else : self .queueB.enqueue(item) def pop( self ): if self .isEmpty(): raise IndexError, 'stack is empty' elif self .queueB.isEmpty(): while not self .queueA.isEmpty(): cur = self .queueA.dequeue() if self .queueA.isEmpty(): return cur self .queueB.enqueue(cur) else : while not self .queueB.isEmpty(): cur = self .queueB.dequeue() if self .queueB.isEmpty(): return cur self .queueA.enqueue(cur) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探