题解 | #【模板】队列#

https://www.nowcoder.com/practice/afe812c80ad946f4b292a26dd13ba549

两个栈来实现队列

核心思路是:栈(先进后出)弹出并压入另一个栈再弹出,完成先进先出

  1. 初始化两个栈,一个为输入栈s1,一个为输出栈s2,均使用list()实现
  2. 执行push,直接s1.append(x)
  3. 执行pop时:
    • 先检查输出栈s2是否为空,不为空直接pop
    • 再检查输入栈s1是否为空,为空则报错error
    • s1不为空则逐项pops2中,最后对s2执行pop
  4. 执行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)
全部评论

相关推荐

1 1 评论
分享
牛客网
牛客企业服务