假如, 我们在设计一个循环队列,预先分配一段内存空间使其容量为capacity。当队尾指针(可用一个指示序号的整型变量实现,其永远指向最后一个元素的下一个位置)指向物理空间上的最后一个存储单元时,此时再插入元素,因为队列可能并未真满,可使尾指针返回来指向物理存储空间中的第一个单元。
此时,我们可能需要一个判断:
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
问题来了!当该队列频繁入队时(甚至我们可以推测出队时也需要同样的判断)或频繁出队时,大规模的判断会让效率很低,怎么办呢?
此时,我们可以用取模运算:
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
因为取模运算是通过硬件实现的,故效率得到了很可观的提高。
同理,对队列长度的计算也可用
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
来代替对头尾指针位置先后的判断。