#P3515. 数组模拟队列

数组模拟队列

题目描述

队列基础知识点

队列(queue)是OI中常用的线性数据结构,遵循先进先出(FIFO) 原则,元素的插入和删除操作分别在两端进行:

  • 允许插入元素的一端称为队尾,插入操作(入队)仅在队尾进行,时间复杂度O(1)O(1)
  • 允许删除元素的一端称为队首,删除操作(出队)仅在队首进行,时间复杂度O(1)O(1)
  • 队列理论上不支持遍历操作。

可以将队列想象成排队的人群,新来的人只能排在队尾,处理总是从队首的人开始。在OI中,既可以用一维数组模拟队列,也可以使用STL的queue实现,本题要求模拟队列的基本操作。

任务要求

实现一个初始为空的队列,支持以下四种合法操作:

  1. push x – 向队尾插入一个数xx
  2. pop – 从队首弹出一个数;
  3. empty – 判断队列是否为空,需输出查询结果;
  4. query – 查询队头元素的值,需输出查询结果。

现在对该队列进行MM次操作,其中emptyquery操作需要输出对应的结果。

输入格式

第一行包含整数MM,表示操作的总次数。 接下来MM行,每行包含一个操作命令,命令为push xpopemptyquery中的一种。

输出格式

对于每个emptyquery操作,输出对应的查询结果,每个结果占一行:

  • empty操作:队列空则输出YES,非空则输出NO
  • query操作:输出一个整数,表示当前队列的队头元素值。

样例输入

10
push 6
empty
query
pop
empty
push 3
push 4
pop
query
push 6

样例输出

NO
6
YES
4

提示

  1. 1M1000001 \le M \le 100000
  2. 1x1091 \le x \le 10^9
  3. 所有操作均保证合法(如popquery操作仅在队列非空时执行)。