题解 | #【模板】队列#

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)
全部评论

相关推荐

马国成同志:如果是真大专的话 可以直接进厂 没必要搞简历 太正式了
点赞 评论 收藏
分享
2024-12-10 00:08
韩山师范学院 Java
讲道理的变色龙在午休:26届已经卷成这个b样了吗,遥想我们24届同学能用java敲个小游戏都算厉害了,20届的更加是一条狗都能找到工作。只能说祝你好运兄弟
点赞 评论 收藏
分享
评论
2
1
分享

创作者周榜

更多
牛客网
牛客企业服务