首页 > 试题广场 >

由两个栈组成的队列

[编程题]由两个栈组成的队列
  • 热度指数: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

数据保证没有不合法的操作
#队列先进先出,栈先入后出
#一个输入栈,一个输出栈,输入栈的顺序是进的顺序,
#将输入栈pop到输出栈后,输出栈的顺序是输出的顺序
import sys
class MyQueue:
    def __init__(self):
        self.push_stack = []
        self.poll_stack = []
    
    def add(self, data):
        self.push_stack.append(data)
    
    def __deliverData(self):
        if not self.poll_stack:
            while self.push_stack:
                self.poll_stack.append(self.push_stack.pop())
                
    def peek(self):
        self.__deliverData()
        return self.poll_stack[-1]
    
    def poll(self):
        self.__deliverData()
        self.poll_stack.pop()

myQueue = MyQueue()
n = int(sys.stdin.readline().strip())
for i in range(n):
    line = sys.stdin.readline().strip()
    args = line.split(' ')
    if args[0] == 'add':
        myQueue.add(int(args[1]))
    elif args[0] == 'peek':
        print(myQueue.peek())
    elif args[0] == 'poll':
        myQueue.poll()


发表于 2020-06-20 19:03:43 回复(0)
#接收输入的整数
n = eval(input())
#存放队列数据
ls = []
for i in range(n):
    order = input()
    #判断命令
    if order == "peek":
        print(ls[0])
    elif order == "poll":
        ls.pop(0) #pop(index) 根据索引删除列表中的元素
    else: #else 只有add命令了,直接将后面的元素加入列表中
        ls.append(int(order.split()[1]))

编辑于 2019-08-12 16:18:38 回复(1)

问题信息

上传者:小小
难度:
2条回答 6087浏览

热门推荐

通过挑战的用户

查看代码