题目:
分析:
这里使用数组进行模拟循环队列插入和删除数据的过程;
使用头指针head和尾指针tail进行维护还存有的一段的连续数据;
记录当前存有的数据的个数来判断是否填满队列;
代码如下:
class MyCircularQueue {
private:
int cur;
int maxi;
int head;
int tail;
vector<int>circulque;
public:
MyCircularQueue(int k) {
circulque=vector<int>(k);
head=0;
tail=0;
maxi=k;
cur=0;
}
bool enQueue(int value) {
if(isFull()){
return false;
}
circulque[tail]=value;
cur++;
tail=(tail==maxi-1)?0:tail+1;
return true;
}
bool deQueue() {
if(isEmpty()){
return false;
}
cur--;
head=(head==maxi-1)?0:head+1;
return true;
}
int Front() {
if(isEmpty()){
return -1;
}
return circulque[head];
}
int Rear() {
if(isEmpty()){
return -1;
}
return tail==0?circulque[maxi-1]:circulque[tail-1];
}
bool isEmpty() {
return cur>0?false:true;
}
bool isFull() {
return cur==maxi?true:false;
}
};
/**
* Your MyCircularQueue object will be instantiated and called as such:
* MyCircularQueue* obj = new MyCircularQueue(k);
* bool param_1 = obj->enQueue(value);
* bool param_2 = obj->deQueue();
* int param_3 = obj->Front();
* int param_4 = obj->Rear();
* bool param_5 = obj->isEmpty();
* bool param_6 = obj->isFull();
*/