/ Vijos / 题库 /

循环队列

循环队列

时间限制:1秒  内存限制:256M


【问题描述】

  用数组模拟队列操作,可以类比成:队首指针front始终在一条直线追赶队尾指针rear,当front与rear相遇时(front==rear),队列为空,称这样的队列为线性队列。在这个过程中,front走过的地方,再也不会走到,造成极大的空间浪费。
  如果把模拟队列的数组看成一个首尾相接的圆环,此时的队列操作,就是front在一个圆环上追赶rear,称这样的队列为循环队列。显然front走过的地方,可以多次重复走到。
    说明
  由于front和rear在圆环上追赶,当front与rear相遇(front==rear)时,队列是空还是满呢?不好判断,因为有可能rear比front多跑一圈。所以,我们在定义循环队列时,需要特别注意数组的大小,一般的要先分析队列中可能的最多元素个数,数组的大小应比最多元素个数大,这时候才能用front==rear判断队列为空。
现在的问题是:我们给出一个循环队列的空间限制n,然后给出m个进队和出队的操作,请你输出最后的队列中的元素(按元素依次出队的顺序)。要特别说明的是,根据数组队列的操作规则,rear始终是指向队尾元素的后面的位置,所以给出循环队列空间为n,则实际只能使用n-1个空间。另外,由于空间的限制,当rear与front相遇后(溢出),应丢弃队首元素,为rear腾空间!

【输入格式】

  第一行一个自然数n,表示要求构造的顺序循环队列空间数。第二行为操作次数k,接下来k行为出队入队操作,每行各代表一次操作。入队用in x表示,表示把整数x入队,出队用out表示(如果队列为空,则忽略次操作)。

【输出格式】

  输出完成所有入队出队操作后,如果队列为空则输出-1,否则一次性出队元素,元素间用一个空格隔开。

【输入输出样例】

 Input

4
7
in 1
in 2
in 5
in 6
out
out
in 8

 Output

6 8

【数据限制】

  对于 \(100\%\) 的数据有:\(1<=n,k<=100000\),\(x\) 为 int 范围内的整数。

【来源】

  Mr.he

信息

ID
1219
难度
2
分类
数据结构 | 队列 点击显示
标签
(无)
递交数
0
已通过
0
通过率
?
被复制
1
上传者