- 普通队列(不循环)
代码参考队列 - 实现【可能要注册,不是广告】
1)使用的时候自己补充头文件和命名空间说明;
2)data.size()
这个东西测试了一下,加入只在队列中输入2个元素的话,这个值就一直是2,其实相较于队列中元素个数
这个含义,更贴合队尾指针
。所以判空的时候p_start
才和这个值进行比较。
- 循环队列
主要有三个要点:
1)队列为空时
front
和rear
设为-1
,此时输入元素要将front
和rear
设为0
;
2)队列只有一个元素时,front=rear
,删除元素要将front
和rear
设为-1
;
3)输入元素时,若队列不满而rear
达到上限(队列长度),则需要循环;删除元素时,若队列不空而front
达到上限,同样需要循环。
我没有采用输入元素时rear = (rear + 1) % size
、删除元素front = (front + 1) % size
的操作,和队列满时front = (rear + 1) % size
的操作,而是将循环过程显白,直接利用元素数目比对判满。
参考程序:
class MyCircularQueue {
private:
vector<int> data;
int front,rear;
int size,count;
public:
MyCircularQueue(int k) {
data.reserve(k);
front=-1;
rear=-1;
count=