作者:好学的程序员 | 来源:互联网 | 2023-05-30 11:09
本文主要详细讲解了数据结构中循环队列在3种不同配置下所延申出来的一些问题,而对于链式队列则没什么好说的。注意本文所说的配置是指:什么时候是队空状态,什么时候是队满状态,入队操作怎么
本文主要详细讲解了数据结构中循环队列在3种不同配置下所延申出来的一些问题,而对于链式队列则没什么好说的。
注意本文所说的配置是指:什么时候是队空状态,什么时候是队满状态,入队操作怎么执行,出队操作怎么执行。它们在不同的规定下会体现出不同的形式,这些不同的形式就是队列的配置了。
文章目录
- 一、正常配置
- 队空状态:
- 入队操作:
- 出队操作:
- 队满状态:
- 计算当前队列中元素个数问题:
- 二、非正常配置1
- 队空状态:
- 入队操作:
- 出队操作:
- 队满状态:
- 计算当前队列中元素个数问题:
- 二、非正常配置2
- 队空状态:
- 入队操作:
- 出队操作:
- 队满状态:
- 计算当前队列中元素个数问题:
一、正常配置
正常配置:先移指针,后看数据
队空状态:
入队操作:
rear先后移一位,然后把数据赋值给rear所指的存储单元。
出队操作:
front先后移一位,然后取front所指存储单元中的元素。
队满状态:
我们需要空出一个位置来区分队空和队满这两个状态。
front指向队头元素的前一个位置,rear指向队尾元素。
计算当前队列中元素个数问题:
上图当rear(rear+1)+(maxSize-1-front)
二、非正常配置1
队空状态:
入队操作:
把数据赋值给rear所指的存储单元,然后rear后移一位(先入队元素,再移动指针,和正常配置相反)。
出队操作:
先取front所指存储单元中的元素,然后front后移一位(和正常配置相反)。
队满状态:
我们需要空出一个位置来区分队空和队满这两个状态。
front指向队头元素,rear指向队尾元素的后一个位置。
计算当前队列中元素个数问题:
上图当rearrear+(maxSize-front)
二、非正常配置2
队空状态:
此非正常配置的队空条件和正常配置的队满条件一样。
入队操作:
下图先移动指针,当然也可以先入队元素,再移动指针。
出队操作:
先取front所指存储单元中的元素,然后front后移一位。
队满状态:
我们需要空出一个位置来区分队空和队满这两个状态。
front指向队头元素,rear指向队尾元素。
计算当前队列中元素个数问题:
上图当rear(rear+1)+(maxSize-front)
本配置中rear和front都指向了元素而不同于上面的配置有一个指向空