#QUEUE001. 排队叫号

排队叫号

排队叫号

题目背景

队列是一种遵循“先进先出”(FIFO)原则的数据结构。新元素从队尾进入,旧元素从队头离开。

本题用于练习 C++ STL 中 queue 的常用操作:

  • push(x):在队尾加入元素;
  • pop():删除队头元素;
  • front():读取队头元素;
  • back():读取队尾元素;
  • empty():判断队列是否为空;
  • size():返回队列中的元素个数。

题目描述

某服务窗口使用队列管理排队人员,每个人都有一个正整数编号。

现在共有 mm 次操作,请按照操作要求维护队列,并输出对应结果。

操作分为以下五种:

  • 1 x:编号为 xx 的人到达,加入队尾;
  • 2:叫到队头的人并让其离开,输出该人的编号;如果队列为空,输出 -1
  • 3:查询队头人员的编号,但不让其离开;如果队列为空,输出 -1
  • 4:查询队尾人员的编号;如果队列为空,输出 -1
  • 5:查询当前队列中的人数。

输入格式

第一行输入一个整数 mm,表示操作次数。

接下来 mm 行,每行输入一次操作。

输出格式

对于操作 2345,每次输出一行对应的结果。

输入输出样例

样例 1

12
1 1001
1 1002
3
4
5
2
3
1 1003
2
2
2
5
1001
1002
2
1001
1002
1002
1003
-1
0

样例 2

7
2
3
4
5
1 8
2
5
-1
-1
-1
0
8
0

数据范围

对于全部测试数据:

  • 1m2000001 \le m \le 200000
  • 1x1091 \le x \le 10^9

提示

处理删除操作时,要先判断队列是否为空。

pop() 只负责删除队头元素,不会返回被删除的值。

错误写法:

int x = q.pop();

正确写法:

int x = q.front();
q.pop();

来源

数据结构课堂练习——队列的基本操作