#P3515. 数组模拟队列
数组模拟队列
Description
【知识点】队列 queue 是 OI 中常用的一个线性数据结构。队列中添加和删除数据的操作分别是在两端进行的。就和“队列”这个名字一样,把它想象成排成一队的人更容易理解。在队列中,处理总是从第一名开始往后进行,而新来的人只能排在队尾。
插入时间复杂度:O(1)。
删除时间复杂度:O(1)。
遍历时间复杂度:队列理论上不支持遍历操作。
队列 是仅限在 一端 进行 插入,另一端 进行 删除 的 线性表。队列 又被称为 先进先出 (First In First Out) 的线性表,简称 FIFO 。

允许进行元素删除的一端称为 队首。如下图所示:

允许进行元素插入的一端称为 队尾。如下图所示:

队列的插入操作,叫做 入队。它是将 数据元素 从 队尾 进行插入的过程,如图所示,表示的是 插入 两个数据(绿色 和 蓝色)的过程:

队列的删除操作,叫做 出队。它是将 队首 元素进行删除的过程,如图所示,表示的是 依次 删除 两个数据(红色 和 橙色)的过程:

下图就是队列的概念图。现在队列中只有数据Blue。

然后,队列中添加了数据 Green,如下图。

紧接着,数据 Red 也入队了。如下图。

从队列中取出(删除)数据时,是从最下面,也就是最早入队的数据开始的。这里取出的是Blue。

如果再进行一次出队操作,取出的就是Green了。

像队列这种最先进去的数据最先被取来,即“先进先出”的结构,我们称为First In First Out,简称 FIFO。
在 OI 中,我们可以使用一维数组来模拟队列,也可以使用 STL 的 queue 来实现队列。这里,我们使用一维数组来模拟队列。
【任务】
实现一个队列,队列初始为空,支持四种操作:
- push x – 向队尾插入一个数 x;
- pop – 从队头弹出一个数;
- empty – 判断队列是否为空;
- query – 查询队头元素。(注:在 STL 的 queue 中,对应的功能函数是 front())
Input Format
第一行包含整数 M,表示操作次数。接下来 M 行,每行包含一个操作命令,操作命令为 push x,pop,empty,query 中的一种。
Output Format
对于每个 empty 和 query 操作都要输出一个查询结果,每个结果占一行。其中,empty 操作的查询结果为 YES 或 NO,query 操作的查询结果为一个整数,表示队头元素的值。
10
push 6
empty
query
pop
empty
push 3
push 4
pop
query
push 6NO
6
YES
4
Hint
1≤M≤100000,1≤x≤10^9,
所有操作保证合法。