【数据结构】——环形队列-ag九游会j9官方网站
ag九游会j9官方网站-j9九游会登录入口首页新版
ag九游会j9官方网站-j9九游会登录入口首页新版
api
j9九游会登录入口首页新版的解决方案
学堂
社区
控制台
注册
登录
/
/
文章详情
/
【数据结构】——环形队列
2023-05-24
42 浏览
返回文档
江海入海,知识涌动,这是我参与江海计划的第12篇。
一.环形队列的定义及其特点
循环队列是一种线性数据结构,其操作依然是先进先出原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。
**特点:**
对于一个普通队列来说,每出队一次,头指针就必须往后移一位,这样使用过的空间就无法再重复使用,(头指针无法回移),即使队列元素小于队列大小,也无济于事,造成空间的浪费。
**而对于循环队列来说,可以重复利用使用过的空间。解决了普通队列的问题。**
> 基于循环队列的特点:我们可以使用数组或者循环链表来实现循环队列。
>
> 使用数组实现的话,尾指针到数组的大小时,回溯到头位置即可。
**在这里给出一道题来实现环形队列。**
二.使用数组来实现环形队列
首先,需要了解清楚的一件事是:如何判断环形队列的数据是否为空或者是否满了?
**假如创建一个大小为4的环形队列,判断环形队列是否为空很简单,如果头指针和尾指针相等,则队列是空的,因为如果插入数据,尾指针一定往后移动。**
环形队列插满数据是这样的:
此时头指针和尾指针指向的位置也是相同的!
所以当队列满队的时候无法区分是队空还是队满。
**解决办法:**
**假如环形队列大小是k,我们就创建k 1大小的环形队列。**
**只需判断 (tail 1)%(k 1)是否等于head 即可。**
1.创建一个队列
> 解读:对于普通队列来说,需要头指针和尾指针来维护入队和出队操作,入队时尾指针后移,出队时头指针后移。
> 在环形队列中也是如此。
**以下代码中的head和front是一样的。**
2.初始化队列
开辟两块空间,一块空间是结构体的空间,一块空间是结构体的数组的空间。
3. 判断环形队列是否为空
> 解读:环形队列是否为空就是判断头指针和尾指针是否相等,如果相等整个环形队列就为空,如果是其他情况,则环形队列至少有一个以上的数据。
4.判断环形队列是否已满
> 判断环形队列是否已满,就是判断tail 1是否等于head,如果
5. 向循环队列插入元素,插入成功返回真
> 解读:
>1. 这里应该考虑的一种特殊情况是,假如插入的数据在环形队列的末尾,尾指针应该指向下一个位置,此时走出了数组的范围,所以需要回到数组0位置。
> 2.如果环形队列满了,则不能再插入了。
6.删除环形链表的数据
解读:
需要考虑特殊情况:特殊情况如下图:
7. 取队头元素
8.取队尾元素
取队尾元素有一种特殊情况:
**假如tail是在0位置,取队尾元素之后,tail需要回退到上一个位
置,即k 1位置处。**
8.释放空间
总结
环形队列在普通队列的基础上优化了空间重复利用问题,使空间利用率更高。
实际生活中使用队列的问题还是有很多的,比如营业厅,医院,银行的自动排队出票的机子,也是通过队列的先进先出的特点来实现的。
请
登录
后发表内容
关 注
相关文章
【数据结构】——队列
热门文章
支付宝开发者日·厦门站
报名开启丨邀你一起探索云端 ai 新兴技术和发展模式
有奖捉虫,小程序云文档提升计划开始啦📢📢
社区每周丨ide 3.7.13 beta 版上线及产品面对面第三期即将开播(8.21-8.25)
支付宝小程序开发者大赛q&a
热门问答
影视创作剪辑怎么提供资质
2023/09/17(至今3天没人解决) 当面付 统一收单线下交易预创建接口 官方php easysdk验签语法错误
请问下这个是什么错误?“tracert_error,当前页面尚未配置 spmb,请参考以下文章进行配置”
这些小程序名称恶意“蹭热度”,“蹭流量”而使用与热门活动或支付宝官方相同或相似的名称,从而引起用户混淆!
【文档反馈】什么是支付宝小程序云
您的社区活跃积分 3,登录后即可领取
网站地图