class MyCircularQueue {
int[] queue;
int size, head, tail, limit;
public MyCircularQueue(int k) {
queue = new int[k];
head = tail = size = 0;
limit = k;
}
public boolean enQueue(int value) {
if (isFull()) {
return false;
}
queue[tail] = value;
tail = tail == limit - 1 ? 0 : (tail + 1);
size++;
return true;
}
public boolean deQueue() {
if (isEmpty()) {
return false;
}
head = head == limit - 1 ? 0 : (head + 1);
size--;
return true;
}
public int Front() {
if (isEmpty()) {
return -1;
}
return queue[head];
}
public int Rear() {
if (isEmpty()) {
return -1;
}
int last = tail == 0 ? (limit - 1) : (tail - 1);
return queue[last];
}
public boolean isEmpty() {
return size == 0;
}
public boolean isFull() {
return size == limit;
}
}