- 一个使用场景
- 基本介绍
- 数组模拟队列
- 分析
- 数组模拟环形队列
- 思路分析
- 代码实现
一个使用场景
银行办理业务的排队叫号
办理业务的人先拿号,然后窗口叫号处理,没有叫到的,则排队等待。
队列:是一个 有序列表,可以用 数组 或 链表 实现。
特点:遵循 先入先出 原则。即:先存入的数据,先取出。
示意图:
- front:队首,队列头部
- rear:队尾,队列尾部
- 左 1 图:队列初始化的两个变量值
- 中图:存入数据后,的首位变化
- 右图:取数据时,从队首取,队首的变量指向也在发生变化
队列本身是 有序列表,使用数组结构来存储队列的数据,则如前面基本介绍中的示意图一样。
声明 4 个变量:
- :用来存储数据的数组
- :该队列的最大容量
- :队首下标,随着数据输出而改变
- :队尾下标,随着数据输入而改变
队列中常用操作分析,以 add,把数据存入队列为例,思路分析:
- 将尾指针往后移:,前提是当 时,队列是空的
- 若尾指针:
- 则将数据存入 rear 所指的数组元素中,
- 否则无法存入数据。表示队列满了
以上思路是一个最基本的实现(不是完美的,看完代码就明白了)。代码实现如下
运行测试
目前实现了一个 一次性的队列(不能复用),因为可以往队列中添加数据,基本功能也是可以的,当队列满之后,再添加就加不进去了,获取数据也不能清空原队列中的数据。
优化方向:使用算法将这个数组改进成一个环形队列。
- front:含义调整
表示:队列的第一个元素,也就是说 就是队列的第一个元素
初始值:0
- rear:含义调整
表示:队列的最后一个元素的下一个位置
初始值(只是初始值):0
这个很重要,是一个小算法,能更方便的实现我们的环形队列。
- 队列 满 计算公式:
- 队列 空 计算公式:
- 队列中 有效元素个数 计算公式:
为了能更清晰这个算法,下面画图来演示队列中元素个数,关键变量的值
该算法取巧的地方在于 rear 的位置,注意看上图,rear 所在的位置 永远是空的,实现环形队列的算法也有多种,这里空出来一个位置,是这里算法的核心。所以,循环队列会浪费一个数组的存储空间。
运行测试功能输出
可以看到上面的表现,和那个图解分析是一致的, rear 所在的位置没有元素,是动态的。
到此这篇环形队列是循环队列吗为什么(环形队列有什么应用场景)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/kjbd-yiny/23074.html