设计应该支持以下操作:
- MyCircularQueue(k): 构造器,设置队列长度为 k 。
- Front: 从队首获取元素。如果队列为空,返回 -1 。
- Rear: 获取队尾元素。如果队列为空,返回 -1 。
- enQueue(value): 向循环队列插入一个元素。如果成功插入则返回真。
- deQueue(): 从循环队列中删除一个元素。如果成功删除则返回真。
- isEmpty(): 检查循环队列是否为空。
- isFull(): 检查循环队列是否已满。
代码实现:
class MyCircularQueue {
public int[] elem;
public int front;
public int rear;
public MyCircularQueue(int k) {
this.elem = new int[k+1];
}
//入队列
public boolean enQueue(int value) {
if(isFull()){
return false;
}
this.elem[this.rear] = value;
this.rear = (this.rear+1)%this.elem.length;
return true;
}
//出队列
public boolean deQueue() {
if (isEmpty()){
return false;
}
this.front = (this.front+1)%this.elem.length;
return true;
}
//返回队列的头部元素
public int Front() {
if (isEmpty()){
return -1;
}
return this.elem[this.front];
}
//返回队列尾部元素
public int Rear() {
if (isEmpty()){
return -1;
}
int index = this.rear == 0 ? this.elem.length-1 : this.rear-1;
return this.elem[index];
}
//判断队列是否为空
public boolean isEmpty() {
return this.rear == this.front;
}
//循环队列是否是满的
public boolean isFull(){
if ((this.rear+1)%this.elem.length == this.front){
return true;
}
return false;
}
}