两个栈来实现队列
核心思路是:栈(先进后出)弹出并压入另一个栈再弹出,完成先进先出
- 初始化两个栈,一个为输入栈
s1,一个为输出栈s2,均使用list()实现 - 执行
push,直接s1.append(x) - 执行
pop时:- 先检查输出栈
s2是否为空,不为空直接pop - 再检查输入栈
s1是否为空,为空则报错error s1不为空则逐项pop到s2中,最后对s2执行pop
- 先检查输出栈
- 执行
front时,和pop类似- 先检查输出栈
s2是否为空,不为空直接返回栈顶s2[-1] - 再检查输入栈
s1是否为空,为空则报错error s1不为空则直接访问首个元素,即s1[0]
- 先检查输出栈
class Quene(object):
def __init__(self):
self.s1 = list() # 输入栈
self.s2 = list() # 输出栈
def push(self, x):
self.s1.append(x)
def pop(self):
if len(self.s2):
return self.s2.pop()
if not len(self.s1):
return 'error'
for i in range(len(self.s1)):
self.s2.append(self.s1.pop())
return self.s2.pop()
def front(self):
if len(self.s2):
return self.s2[-1]
if not len(self.s1):
return 'error'
return self.s1[0]
def check(self, d):
if d == 'pop':
print(self.pop())
elif d == 'front':
print(self.front())
else:
self.push(int(d.split()[-1]))
n = input()
tmp = Quene()
for _ in range(int(n)):
data = input()
tmp.check(data)

京公网安备 11010502036488号