首页 > 其他分享 >数据结构_用数组实现环形队列

数据结构_用数组实现环形队列

时间:2022-10-22 21:35:08浏览次数:77  
标签:队列 环形 maxSize 数组 front 数据结构 rear

思路分析:

一、front就指向队列的第一个元素,也就是说,arr[front]就是队列的第一个元素

 

二、rear就是指向队列的最后一个元素的后一个位置,我们需要空出这个rear指向的空间(牺牲这个空间)

 

三、现在环形队列中,当队列满时,条件为:( rear + 1 ) % maxSize = front 

  原本队列满的条件是 rear = maxSize - 1 

  我的解释是:

 

所以实际上这个环形队列实际的存储数据的长度(从0开始到x)为 maxSize - 2 ,也就是 这个空间的大小-1 ,剩下的这个空间被牺牲掉了,用来做判断这个环形队列是不是满的!

当然,上面的图从1开始是不严谨的,应该从0开始,从1开始只是我画的时候方便=-=

 

四、当队列为空的时候,条件仍然是 rear = front 

 

五、队列中有效的数据的个数为( rear + maxSize - fron ) % maxSize 

 

 

 这个公式的解释可以这样理解,首先rear加上maxSize也就是从数组的0位置开始到rear位置加上了容量大小,此时减去一个front就相当于数组中将这个占有数据的值往下推,推到从0位置到rear-front,

此时对maxSize取余就是相当于一个大于maxSize的数减去了一个maxSize所得到的余数,就是数组中有效存储的个数。

把这个公式这样写更好理解:

          (  rear - front + maxSize ) % maxSize 

          1、先不考虑这个环存取数据绕过一圈以上了,那么肯定有rear>front,那么rear-front就是存的有效个数

          2、如果这个环存取数据也就rear和front通过一系列位移不知道是rear大还是front大

          3、此时加上maxSize,就一定可以保证rear-front是一个正数,此时对maxSize取余可以得到有效个数了

          

 

 

 

 

 

 

 

  

 

标签:队列,环形,maxSize,数组,front,数据结构,rear
From: https://www.cnblogs.com/leehl8016/p/16817362.html

相关文章

  • 13-13-消息队列设计实践课_ev
                                        ......
  • 数据结构与算法系列二之链表、哈希表及栈
    第四章链表21、删除倒数第k个节点题目:如果给定一个链表,请问如何删除链表中的倒数第k个节点?假设链表中节点的总数为n,那么1≤k≤n。要求只能遍历链表一次。例如,输入下图1......
  • 利用redis作为消息队列实现异步秒杀业务
    实现消费券秒杀的优化,在加入限时抢购的优惠券时,自动的将消费券的库存stock信息也加入到redis中(可设为抢购结束后过期)抢购之前在redis中进行库存是否充足(stock)、用户是否已......
  • 刷题 LeetCode 栈和队列2
    代码随想录LeetCode20. 有效的括号carl栈思路左括号入栈,右括号出栈,如果出栈时栈为空或不匹配,或者最终栈不为空则false细节LeetCode1047. 删除字符串中的所有......
  • ModStart: 宝塔配置 MySQL 队列调度
    宝塔配置MySQL队列调度执行以下操作前提前进入网站根目录,如​​cd/www/wwwroot/xxx.com​​执行​​artisan​​ 命令前请参照开发教程→开发使用问题→如何运行​......
  • 消息队列的解释【杭州多测师】【杭州多测师_王sir】
    一、消息队列概述消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。目前使用较多的消息队列有A......
  • 单调队列优化dp(1)(P2034 选择数字)
    参考算法学习笔记(66):单调队列-知乎(zhihu.com)题目描述给定一行n个非负整数a[1]..a[n]。现在你可以选择其中若干个数,但不能有超过k个连续的数字被选择。你的任务是......
  • 【数据结构】时间复杂度与空间复杂度概念
    1.时间复杂度1.什么是时间复杂度时间复杂度的定义:在计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。一个算法执行所耗费的时间,从理论上说,是不能算......
  • 小孩的游戏 - 2021数据结构 排序和选择实验题
    小孩的游戏-2021数据结构排序和选择实验题pre做都做了,干脆发上来算了:D题目分析算法与数据结构实验题5.18小孩的游戏★实验任务一群小孩子在玩游戏,游戏......
  • 刷题 LeetCode 栈和队列1
    代码随想录LeetCode232. 用栈实现队列carl栈#队列思路stack和queue的接口和性质细节stack的pop()没有返回值LeetCode225. 用队列实现栈carl栈#队列......