一文搞懂循环队列的不同配置问题

本文主要详细讲解了数据结构中循环队列在3种不同配置下所延申出来的一些问题,而对于链式队列则没什么好说的。

注意本文所说的配置是指:什么时候是队空状态,什么时候是队满状态,入队操作怎么执行,出队操作怎么执行。它们在不同的规定下会体现出不同的形式,这些不同的形式就是队列的配置了。


一、正常配置

正常配置:先移指针,后看数据

队空状态:

在这里插入图片描述

入队操作:

rear先后移一位,然后把数据赋值给rear所指的存储单元。
在这里插入图片描述

出队操作:

front先后移一位,然后取front所指存储单元中的元素。
在这里插入图片描述

队满状态:

我们需要空出一个位置来区分队空和队满这两个状态。
front指向队头元素的前一个位置,rear指向队尾元素。
在这里插入图片描述

计算当前队列中元素个数问题:

在这里插入图片描述
上图当rear<front时:队中元素个数=黄色的+蓝色的=(rear+1)+(maxSize-1-front)


二、非正常配置1

队空状态:

在这里插入图片描述

入队操作:

把数据赋值给rear所指的存储单元,然后rear后移一位(先入队元素,再移动指针,和正常配置相反)。
在这里插入图片描述

出队操作:

先取front所指存储单元中的元素,然后front后移一位(和正常配置相反)。
在这里插入图片描述

队满状态:

我们需要空出一个位置来区分队空和队满这两个状态。
front指向队头元素,rear指向队尾元素的后一个位置。
在这里插入图片描述

计算当前队列中元素个数问题:

在这里插入图片描述
上图当rear<front时:队中元素个数=黄色的+蓝色的=rear+(maxSize-front)


二、非正常配置2

队空状态:

此非正常配置的队空条件和正常配置的队满条件一样。
在这里插入图片描述

入队操作:

下图先移动指针,当然也可以先入队元素,再移动指针。
在这里插入图片描述

出队操作:

先取front所指存储单元中的元素,然后front后移一位。
在这里插入图片描述

队满状态:

我们需要空出一个位置来区分队空和队满这两个状态。
front指向队头元素,rear指向队尾元素。
在这里插入图片描述

计算当前队列中元素个数问题:

在这里插入图片描述
上图当rear<front时:队中元素个数=黄色的+蓝色的=(rear+1)+(maxSize-front)

本配置中rear和front都指向了元素而不同于上面的配置有一个指向空

发布了128 篇原创文章 · 获赞 689 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/zag666/article/details/105572838
今日推荐