循环队列是我们可以对队列有更深一步的理解的题目,而且可以进一步加强其他方面的知识(例如对循环数组的取模运算,指针的解引用),是个蛮不错的巩固习题,话不多说,进入正题。
链接在此:设计循环队列
强烈建议先自己做一遍,直接看的话可能会比较不知所云
本题可以使用
数组或链表来设计,本篇文章都会涉及到
做这题时会遇到很多难点
先说结论:此题的难点在于如何判断数组的
空与满,不管是链表还是数组,实现此问题都是难点。
在数据结构中,我们通常在解决此问题时都是选择多设置一个位置,back指向当前元素的下一个。
但多出来的位置不是不用,例如:
利用数组设计:
思路:
已经有了上述的前置知识
我们就可以比较轻易地判断空与满,数组中的front
和back
下标指向同一个位置时是空,那么什么时候会满呢?
当back
的下一个为front
时就为满,即back+1 == front
,
但是如果back
在front
后边,就需要我们的比较灵活的运用取模运算
在上边我们说到back+1 == front
时为满,但是在上图中,我们发现back+1
并不是front
,而是超出了数组,
我们说过,会定义N+1
个空间,N
是元素个数,经过思考,我们会发现N
就是back
的下标,N+1
就是back+1
位置的下标,
那我们(back + 1)% (N + 1) == front
时就是满
代码中剩下的取模运算也都大同小异
代码实现:
利用链表设计:
思路:
代码实现:
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。