首页 > 试题广场 >

由两个栈组成的队列

[编程题]由两个栈组成的队列
  • 热度指数:7530 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
用两个栈实现队列,支持队列的基本操作。

输入描述:
第一行输入一个整数N,表示对队列进行的操作总数。

下面N行每行输入一个字符串S,表示操作的种类。

如果S为"add",则后面还有一个整数X表示向队列尾部加入整数X。

如果S为"poll",则表示弹出队列头部操作。

如果S为"peek",则表示询问当前队列中头部元素是多少。


输出描述:
对于每一个为"peek"的操作,输出一行表示当前队列中头部元素是多少。
示例1

输入

6
add 1
add 2
add 3
peek
poll
peek

输出

1
2

备注:
1<=N<=1000000

-1000000<=X<=1000000

数据保证没有不合法的操作

import sys

class stackToQueue(object):
    def __init__(self):
        self.stackPush = []
        self.stackPop = []
        self.stackTemp = []

    def pushToPop(self):
        if not self.stackPop:
            while self.stackPush:
                self.stackPop.append(self.stackPush.pop())

    def add(self, num):
        self.stackPush.append(num)
        self.pushToPop()

    def peek(self):
        if self.stackPop:
            return self.stackPop[len(self.stackPop) - 1]
        else:
            self.pushToPop()
            return self.stackPop[len(self.stackPop) - 1]

    def poll(self):
        if self.stackPop:
            self.stackPop.pop()
        else:
            self.pushToPop()
            self.stackPop.pop()

N = int(input())
result = stackToQueue()
for i in range(N):
    line = sys.stdin.readline().strip()
    word = line.split()
    if word[0] == "add":
        result.add(int(word[1]))
    elif word[0] == "peek":
        print(result.peek())
    elif word[0] == "poll":
        result.poll()

发表于 2022-02-12 17:58:33 回复(0)