解题思路
用一个数组来模拟循环队列,用两个指针分别指向当前队列的头和尾。
head指向当前队列的头元素,tail指向下一个元素要插入的位置。
额外注意一下边界情况就可以了。
代码
class MyCircularQueue {
private int size=0;
private int[] v;
private int head=0;
private int tail=0;
public MyCircularQueue(int k) {
this.size=k;
v=new int[k];
for (int i=0;i<k;i++) v[i]=-1;
}
public boolean enQueue(int value) {
if (isFull()) return false;
v[tail]=value;
if (tail+1<size) tail++;
else tail=0;
return true;
}
public boolean deQueue() {
if (isEmpty()) return false;
v[head]=-1;
if (head+1<size) head++;
else head=0;
return true;
}
public int Front() {
return v[head];
}
public int Rear() {
if (tail-1<0)
return v[size-1];
else return v[tail-1];
}
public boolean isEmpty() {
if (v[head]==-1)
return true;
else return false;
}
public boolean isFull() {
if (v[head]!=-1 && head==tail)
return true;
else return false;
}
}
/**
* Your MyCircularQueue object will be instantiated and called as such:
* MyCircularQueue obj = new MyCircularQueue(k);
* boolean param_1 = obj.enQueue(value);
* boolean param_2 = obj.deQueue();
* int param_3 = obj.Front();
* int param_4 = obj.Rear();
* boolean param_5 = obj.isEmpty();
* boolean param_6 = obj.isFull();
*/