1. 题目
有一个用数组Q[1…m]表示的环形队列(先进先出,队尾进队头出),约定队列的容量为m,f为当前队头元素在数组中的位置,r为队尾元素的后一位置(按顺时针方向)。若队列非空且未满,则计算队列中元素个数的公式应为 ?
2. 题解
2.1 解法1
分情况讨论:
1.若f<r<=m, 则有r-f <m,即队尾没有超出边界,则为r-f
2. 若r<f<=m, r-f < 0, 即队尾超出边界m,那么应为m+r -f
综合两种情况,得到答案 (m+r-f) mod m
2.2 解法2
注意数组C[1…m]下标从1开始,并且r为队尾元素的后一位置。
当r>f时,好说,队列的长度为r-f;
当r<f时,队列的长度分为两段,一段是m-f+1,一段是r-1,加在一起,队列长度为r-f+m;
当r=f时,队列长度可能为0也可能为m,实际编程时,会设置一个boolean型变量来区分。
因此通用的计算队列长度公式为:(r-f+m)%m
3. 记住公式
# 队列中,队列满的条件是:
(rear+1)%QueueSize=front;
# 队列长度公式是:
(rear-front+QueueSize)%QueueSize。