当前位置:网站首页 > 人工智能与大数据应用 > 正文

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



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

一个使用场景

银行办理业务的排队叫号

数据结构与<a href='/tag/188'>算法</a>——队列(环形队列)_数据

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

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

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

示意图:

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

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

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

声明 4 个变量:

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

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

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

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

 
  

运行测试

 
  

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

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

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

  1. front:含义调整

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

    初始值:0

  2. rear:含义调整

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

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

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

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

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

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

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

 
  

运行测试功能输出

 
  

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

到此这篇环形队列是循环队列吗为什么(环形队列有什么应用场景)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • ldr指令和ldr伪指令有什么不同(ldr伪指令与ldr加载指令的功能和应用有何区别)2025-06-20 23:54:06
  • 快程序怎么删除(怎么彻底删除快应用程序)2025-06-20 23:54:06
  • msp432单片机(msp430单片机应用)2025-06-20 23:54:06
  • 快应用中心下载安装(快应用中心下载安装 app)2025-06-20 23:54:06
  • 如何卸载快应用程序(如何卸载应用程序手机)2025-06-20 23:54:06
  • 快应用中心是啥(快应用中心有用吗)2025-06-20 23:54:06
  • 工具类应用软件(工具类应用软件商店)2025-06-20 23:54:06
  • Qpainter应用(qpainter.drawline)2025-06-20 23:54:06
  • msp430单片机应用(msp430单片机教程)2025-06-20 23:54:06
  • 快程序卸载(如何卸载快应用程序)2025-06-20 23:54:06
  • 全屏图片