环形队列是循环队列吗为什么(环形队列有什么应用场景)

环形队列是循环队列吗为什么(环形队列有什么应用场景)目录 一个使用场景基本介绍 数组模拟队列 分析 数组模拟环形队列思路分析 代码实现 一个使用场景 银行办理业务的排队叫号 办理业务的人先拿号 然后窗口叫号处理 没有叫到的 则排队等待 队列 是一个 有序列表 可以用 数组 或 链表 实现 特点 遵循 先入先出 原则 即 先存入的数据 先取出 示意图 front 队首 队列头部 rear 队尾 队列尾部 左 1 图

大家好,我是讯享网,很高兴认识大家。



目录
  • 一个使用场景
    • 基本介绍
    • 数组模拟队列
    • 分析
    • 数组模拟环形队列
      • 思路分析
      • 代码实现

一个使用场景

银行办理业务的排队叫号

数据结构与算法——队列(环形队列)_数据
讯享网

办理业务的人先拿号,然后窗口叫号处理,没有叫到的,则排队等待。

队列:是一个 有序列表,可以用 数组链表 实现。

特点:遵循 先入先出 原则。即:先存入的数据,先取出。

示意图:

数据结构与算法——队列(环形队列)_数据_02

  • front:队首,队列头部
  • rear:队尾,队列尾部
  • 左 1 图:队列初始化的两个变量值
  • 中图:存入数据后,的首位变化
  • 右图:取数据时,从队首取,队首的变量指向也在发生变化

队列本身是 有序列表,使用数组结构来存储队列的数据,则如前面基本介绍中的示意图一样。

声明 4 个变量:

  • :用来存储数据的数组
  • :该队列的最大容量
  • :队首下标,随着数据输出而改变
  • :队尾下标,随着数据输入而改变

队列中常用操作分析,以 add,把数据存入队列为例,思路分析:

  1. 将尾指针往后移:,前提是当 时,队列是空的
  2. 若尾指针:
    • 则将数据存入 rear 所指的数组元素中,
    • 否则无法存入数据。表示队列满了

以上思路是一个最基本的实现(不是完美的,看完代码就明白了)。代码实现如下

 

讯享网

运行测试

讯享网

目前实现了一个 一次性的队列(不能复用),因为可以往队列中添加数据,基本功能也是可以的,当队列满之后,再添加就加不进去了,获取数据也不能清空原队列中的数据。

优化方向:使用算法将这个数组改进成一个环形队列。

数据结构与算法——队列(环形队列)_存储数据_03

  1. front:含义调整

    表示:队列的第一个元素,也就是说 就是队列的第一个元素

    初始值:0

  2. rear:含义调整

    表示:队列的最后一个元素的下一个位置

    初始值(只是初始值):0

    这个很重要,是一个小算法,能更方便的实现我们的环形队列。

  3. 队列 计算公式:
  4. 队列 计算公式:
  5. 队列中 有效元素个数 计算公式:

为了能更清晰这个算法,下面画图来演示队列中元素个数,关键变量的值

数据结构与算法——队列(环形队列)_添加数据_04

该算法取巧的地方在于 rear 的位置,注意看上图,rear 所在的位置 永远是空的,实现环形队列的算法也有多种,这里空出来一个位置,是这里算法的核心。所以,循环队列会浪费一个数组的存储空间。

 

运行测试功能输出

讯享网

可以看到上面的表现,和那个图解分析是一致的, rear 所在的位置没有元素,是动态的。

小讯
上一篇 2025-05-28 23:50
下一篇 2025-05-23 09:25

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/152790.html