一、用两个栈实现队列
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
# -*- coding:utf-8 -*-
'''
两个栈实现队列:一个栈负责入队,另一个负责出队
'''
class Solution:
def __init__(self):
self.stack1 = [] # 负责入队
self.stack2 = [] # 负责出队
# 入队
def push(self, node):
self.stack1.append(node)
# 出队
def pop(self):
# return xx
# 出栈为空时,则从入栈中导入到出栈中!
if len(self.stack2) == 0:
if len(self.stack1) == 0:
return
while len(self.stack1) > 0:
self.stack2.append(self.stack1[-1]) # 一次性全部入队
self.stack1.pop()
# 出栈不为空,出队
xx = self.stack2[-1]
self.stack2.pop()
return xx
s = Solution()
s.push(10)
s.push(11)
s.push(12)
print(s.pop())
s.push(13)
print(s.pop())
print(s.pop())
print(s.pop())
print(s.pop()) # 排查异常
二、(变形)用两个队列实现栈
# -*- coding:UTF-8 -*-
'''
两个队列实现栈: 先进先出,实现栈的“后进先出”
'''
class Solution:
def __init__(self):
# 两个队列交替辅助
self.queue1 = []
self.queue2 = []
# 入栈
def push(self, x):
if self.queue2 == []:
self.queue1.append(x)
else:
self.queue2.append(x)
# 出栈
def pop(self):
if self.queue1 == [] and self.queue2 == []:
return
# 现将队列前(length-1)个依次出队进入辅助空队列,在pop掉最后进来的元素
if self.queue1 != []:
length = len(self.queue1)
for i in range(length-1):
# queue2辅助,存储queue1先出来的元素length-1个
self.queue2.append(self.queue1.pop(0))
return self.queue1.pop(0) # 弹出queue1最后一个元素,至此queue1为空
if self.queue2 != []:
length = len(self.queue2)
for i in range(length-1):
self.queue1.append(self.queue2.pop(0))
return self.queue2.pop(0)
s = Solution()
s.push(10)
s.push(11)
s.push(12)
print(s.pop())
s.push(13)
print(s.pop())
print(s.pop())
print(s.pop())
print(s.pop())