知循环队列的存储空间为数组data[21

已知循环队列的存储空间为数组data[21],且头指针和尾指针分别为8和3,则该队列的当前长度?为什么答案是17。不是16

那你说说为啥是16呢
头指向8,尾指向3,那么哪些元素不在队列呢?显然是4到7,因为3和8也是队列元素。4到7共4个,所以队列长度就是21-4=17

该回答引用ChatGPT

根据循环队列的定义,队列长度应该为"尾指针"位置减去"头指针"位置,但需要注意的是,如果尾指针在头指针前面,说明队列被分成了两段,此时队列长度为尾部段长度 + 头部段长度。因为尾部段的长度是数组长度减去头部段的长度,所以可以先计算尾部段长度,然后再用数组长度减去

尾部段长度得到头部段长度。

根据题目所给出的头指针和尾指针,可以发现尾指针在头指针前面,因此需要分别计算头部段长度和尾部段长度:

尾部段长度 = 数组长度 - 头指针 + 尾指针 = 21 - 8 + 3 = 16
头部段长度 = 数组长度 - 尾部段长度 = 21 - 16 = 5

因此,队列长度为尾部段长度 + 头部段长度 = 16 + 5 = 21。所以,正确答案是21,而不是17。