循环队列是一种线性数据结构,循环队列与普通队列的区别就是循环队列可以使用队列之前用过的空间。下面是实现自己的循环队列
class MyCircularQueue{
private:
vector<int> data;
int front;
int tail;
int size;
public:
/** Initialize your data structure here. Set the size of the queue to be k. */
MyCircularQueue(int k) {
data.resize(k);
front=-1;
tail=-1;
size=k;
}
/** Insert an element into the circular queue. Return true if the operation is successful. */
bool enQueue(int value) {
if(isFull()) return false;
if(isEmpty()) front=0;
tail=(tail+1)%size;
data[tail]=value;
return true;
}
/** Delete an element from the circular queue. Return true if the operation is successful. */
bool deQueue() {
if(isEmpty()) return false;
if(tail==front)
{
tail=-1;
front=-1;
return true;
}
front=(front+1)%size;
return true;
}
/** Get the front item from the queue. */
int Front() {
if(isEmpty()) return -1;
return data[front];
}
/** Get the last item from the queue. */
int Rear() {
if(isEmpty()) return -1;
return data[tail];
}
/** Checks whether the circular queue is empty or not. */
bool isEmpty() {
return front==-1;
}
/** Checks whether the circular queue is full or not. */
bool isFull() {
return (tail+1)%size==front;
}
}
其中循环队列为空的条件就是head为-1,而循环队列为满的条件就是尾指针向后移动一位就是头指针。