队列有五种基本操作,插入队尾、取出队首、删除队首、队列大小、清空队列。
现在让你模拟一个队列的操作,具体格式参考输入。
注意本题有多组输入。
数据范围: 操作数满足 ,读入的数都满足
进阶:空间复杂度 ,所有操作的时间复杂度都满足
进阶:空间复杂度 ,所有操作的时间复杂度都满足
第一行输入一个整数T,表示接下来有T组测试数据。
对于每组测试数据:
第一行输入一个整数Q,表示有Q次操作。
接下来Q行,每行输入一种队列操作方式,具体格式如下:
初始状态下队列为空。
插入队尾:PUSH X
取出队首:TOP//仅仅是看一下队首元素,不要把队首元素删除
删除队首:POP
队列大小:SIZE清空队列:CLEAR1<=T<=1001<=Q,x<=1000保证操作为以上5种的任意一种。
对于每组测试数据:
如果操作为“取出队首”,输出队首元素,如果无法取出,输出“-1”
如果操作为“删除队首”,如果无法删除,输出“-1”
如果操作为“队列大小”,输出队列大小
其他操作无需输出
2 7 PUSH 1 PUSH 2 TOP POP TOP POP POP 5 PUSH 1 PUSH 2 SIZE POP SIZE
1 2 -1 2 1
class Queue { constructor(n){ this.maxsize=n //数组最大容量 this.arr = new Array(n)//用于存数据的数组,模拟队列 this.front = this.rear = 0//初始化下标值,指向队列头部 } push(n){ this.arr[this.rear]=n this.rear = (this.rear+1)%this.maxsize } top(){ if(this.rear==this.front){//为空无法取出 return -1 } return this.arr[this.front] } pop(){ if(this.rear==this.front){//为空无法删除 return -1 } this.front = (this.front+1)%this.maxsize return null } size(){ return (this.rear-this.front+this.maxsize)%this.maxsize } clear(){ this.rear = this.front } } var T = parseInt(readline()) for(var i=0;i<T;i++){ let queue = new Queue(1000) var Q = parseInt(readline()) for(var j=0;j<Q;j++){ var lines = readline().split(" ") switch (lines[0]){ case "PUSH": queue.push(lines[1]) break } switch (lines[0]){ case "TOP": console.log(queue.top()) break } switch (lines[0]){ case "POP": if(queue.pop()!==null){ console.log(queue.pop()) } break } switch (lines[0]){ case "SIZE": console.log(queue.size()) break } switch (lines[0]){ case "CLEAR": queue.clear() break } } }