front为队头指针
rear为队尾指针
一般情况下当队空时:front=rear
当队满时:front=rear 亦成立
因此只凭等式front=rear无法判断队空还是队满。
有三种方法处理上述问题:
一.少用一个存储位置
当队列为空时条件:rear == front
当队列满时条件为:rear+1 == front
二.设置一个标记位
设置初始标记: bool flag=false //判断是否为空
当入队列时,让rear往后移动,让flag=true
当出队列时,让front往后移动, 判断头尾指针是否相等
if(front==rear)
{
flag=false;
}
当队列为空时: rear == front && flag==false
当队列为满时: rear == front && flag == true
三.增加一个变量记录队列中有效元素个数
int count=0;
队列为空时,count == 0
当有元素入队时,count++,当count和队列的maxsize相等时,代表队列已满
最后,牛客网有道题:
顺序循环队列 Q 空的条件是: Q.front==Q.rear.
-
正确
-
错误
答案 是 正确!请注意这里说的是循环队列为空的条件,而不是为满的条件。