原文链接https://leetcode-cn.com/problems/design-circular-queue/description/
这个就是基础的循环队列的相关问题。问题难点主要是判断空和满的情况。
class MyCircularQueue {
int[] queue;
int front;
int rear;
int size;
/** Initialize your data structure here. Set the size of the queue to be k. */
public MyCircularQueue(int k) {
queue = new int[k+1];
size = k;
}
/** Insert an element into the circular queue. Return true if the operation is successful. */
public boolean enQueue(int value) {
if(isFull()) return false;
queue[rear] = value;
rear = (rear+1)%(size+1);
return true;
}
/** Delete an element from the circular queue. Return true if the operation is successful. */
public boolean deQueue() {
if(isEmpty()) return false;
front = (front+1)%(size+1);
return true;
}
/** Get the front item from the queue. */
public int Front() {
if(isEmpty()) return -1;
return queue[front];
}
/** Get the last item from the queue. */
public int Rear() {
if(isEmpty()) return -1;
return queue[(rear+size)%(size+1)];
}
/** Checks whether the circular queue is empty or not. */
public boolean isEmpty() {
return front == rear;
}
/** Checks whether the circular queue is full or not. */
public boolean isFull() {
return (rear+1)%(size+1) == front;
}
}