首页 > 编程知识 正文

循环队列图解,循环队列是队列的一种

时间:2023-05-04 07:23:18 阅读:132378 作者:534

使用链表实现队列是最好的方法。 对于数组,队列可能如下:

如图所示,不能继续添加元素。 否则,数组将越界,导致程序错误。 但是,由于还没有占用很多实空间,所以此时不应该扩展数组。  

这个时候我们应该怎么解决这个问题呢? 我们将这作为循环队列来实现。

循环队列是什么是循环队列? 首先,说明循环队列仍然是基于数组实现的。 但是,为了形象化问题,如下图所示

1 .图中有两个指针(其实有两个整数型变量。 这里有指示作用,所以这里理解为指针) front,rear,一个是指示队的头,一个是指示队的尾。  

2.rear和front互相追赶。 此跟踪过程是添加和删除队列的过程,当rear赶上head时队列已满,当front赶上rear时队列为空。

3 .我们把它打碎得很小,想要剩下的。 这样,两个值不会超出最大范围,可以得到弯曲的效果。 所以,必须对循环矩阵给出最大值MAXQSIZE。

这其实是我们推测的。 总之,我们要做的是利用循环解决空间浪费的问题。

添加循环队列实现进程元素时,(rear 1) %MAXQSIZE; //理解为什么要求余数吗?

删除一个元素时,(前1 ) %MAXQSIZE; //理解为什么要求余数吗?

如果rear=front,则队列可能已满,也可能空闲。

在循环队列中,如果队列为空,则有front=rear;如果所有队列空间都已满,则有front=rear。 为了区分这两种情况,规定循环队列最多只能有MaxSize-1一个队列元素,如果循环队列中只有一个空存储单元,则队列已满。 因此,队列为空的条件是front=rear,队列满的条件是front=(rear 1) %MaxSize。 有满和空两种情况,我们需要分别判断:

完整:如果队列将元素添加到rear,并且下一个元素是head,即,在旋转圈子等待时,队列将满。 (Q.rear 1) %MAXSIZE=Q.front

空:如果队列将元素删除到head=rear,则认为队列为空。 Q.rear==Q.front,不一定是0。

图标:

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。