用两个栈实现队列
题目描述
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
解题思路
创建两个栈,一个接收栈acceptStack,一个输出栈outputStack。
实现的队列的入队push的主要操作由acceptStack实现,出队pop的主要操作由outputStack实现。acceptStack通过将数据追加到list中完成push操作;outputStack在栈不为空时方可实现pop操作,当outputStack为空时,acceptStack不为空时,需要将acceptStack中的数据从acceptStack出栈并入栈至outputStack中(此时,acceptStack中的栈顶元素到了outputStack的栈底,acceptStack的栈底元素到了outputStack的栈顶),然后再完成从outputStack中pop的操作。如果outputStack、acceptStack均为空说明无法进行pop操作。
代码示例
# coding:utf-8
'''用两个栈来实现一个队列,完成队列的Push和Pop操作。
队列中的元素为int类型。
'''
class TwoStackToQueue():
def __init__(self):
# 创建两个栈,一个接收栈,一个输出栈
self.accpetStack = []
self.outputStack = []
# 入队列方法
def push(self, node):
# 将元素追加到接收栈中,完成入队操作
self.accpetStack.append(node)
# 出队列方法
def pop(self):
# 输出栈为空,但接收栈不为空,需要将接收栈中的元素从接收栈中出栈,
# 入栈到输出栈中,然后再通过输出栈的出栈完成出队操作
if self.outputStack == []: # 输出栈为空
while self.accpetStack: # 接收栈不为空
result = self.accpetStack.pop() # 从接收栈中出栈
self.outputStack.append(result) # 入栈到输出栈中
# 输出栈不为空的情况,将栈顶元素出栈,完成出队操作
if self.outputStack != []:
result = self.outputStack.pop()
return result
# 输出栈为空,此时说明接收栈也为空,无法进行pop操作返回None
else:
return None
if __name__ == '__main__':
fun = TwoStackToQueue()
fun.push(1)
fun.push(2)
fun.push(3)
fun.push(4)
fun.push(5)
print(fun.pop())
print(fun.pop())
print(fun.pop())
print(fun.pop())
print(fun.pop())
print(fun.pop())