题解 | #【模板】队列#
https://www.nowcoder.com/practice/afe812c80ad946f4b292a26dd13ba549
两个栈来实现队列
核心思路是:栈(先进后出)弹出并压入另一个栈再弹出,完成先进先出
- 初始化两个栈,一个为输入栈
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)