题目链接
LeetCode.622设计循环队列
最近在学习队列,所以本题采用的是书上的方法(PS:为了增加难度,我使用数组模拟队列,这样可以使我理解更深刻)。
本题主要在需要注重考虑判断队列是否满时,传统方法无法直接区别空与满时的情况。本题多留出一个位置,有效的区别了空队列与满队列的情况。
代码段:
class MyCircularQueue {
public:
MyCircularQueue(int k) {
len = k + 1;
a = 0;
b = 0;
}
bool enQueue(int value) {
if (isFull())
return false;
else
que[b] = value;
b = (b + 1) % len;
return true;
}
bool deQueue() {
if (isEmpty())
return false;
else
a = (a + 1) % len;
return true;
}
int Front() {
if (isEmpty())
return -1;
else
return que[a];
}
int Rear() {
if (isEmpty())
return -1;
else if (b == 0)
return que[len - 1];
else
return que[b - 1];
}
bool isEmpty() {
if (a == b)
return true;
else
return false;
}
bool isFull() {
if ((b + 1) % len == a)
return true;
else
return false;
}
private:
int que[1001];
int len, a, b;
};