LeetCode 622 设计循环队列[数组 队列] HERODING的LeetCode之路
Posted HERODING23
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 622 设计循环队列[数组 队列] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。
解题思路
解决本题的关键在于定义好数据结构类型,首先定义一个长度为k的数组,再定义几个变量,当前要插入节点的下标index,当前队列长度len,以及最大队列容量n,入队列首先判断是否满,不满就往index位置插入即可,出队列直接len–,不需要对删除的数进行操作,获取队首元素就需要从index位置往前数len的长度,注意是循环数组,所以有取余操作,队尾就是index的前一个位置的数,也需要注意取余操作,最后就是判断空和满的函数,直接根据len是否为0或者n进行返回,代码如下:
代码
class MyCircularQueue
private:
vector<int> q;
int len;
int n;
int index;
public:
MyCircularQueue(int k)
q = vector<int>(k, 0);
len = 0;
index = 0;
n = k;
bool enQueue(int value)
if(len < n)
q[index] = value;
index ++;
index %= n;
len ++;
return true;
return false;
bool deQueue()
if(len == 0)
return false;
len --;
return true;
int Front()
if(len == 0)
return -1;
return q[(index + n - len) % n];
int Rear()
if(len == 0)
return -1;
return q[(index + n - 1) % n];
bool isEmpty()
return len == 0;
bool isFull()
return len == n;
;
/**
* 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();
*/
以上是关于LeetCode 622 设计循环队列[数组 队列] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章