数据结构(Java)之队列(2)-循环队列的思路

本文深入探讨了循环队列的实现机制,对比了传统队列的出队操作,指出循环队列通过front和tail指针优化了时间复杂度,避免了元素移动,解决了队列满与空的判断难题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

出队操作每个元素都要进行移动,时间复杂度为O(n)级别
循环队列则能很好的解决这个问题
在这里插入图片描述
我们用front 来指向队首的位置
tail指向队尾的后一个位置(也就是下个入队元素应该待得位置)
此时front == tail 表示队列为空

若有元素入队,只需要维护tail向后移动一位(tail++)在这里插入图片描述
假设现在队列中有5个元素在这里插入图片描述
如果要出队一个元素,a出队,维护front++,指向此时队列中的第一个元素(队首)
在这里插入图片描述

结论:入队维护rail 出队维护front

在这里插入图片描述
当队列处于此图状态时,再有元素入队
tail操作应该是当前的索引+1 %(取余) 整个数组的长度 如下图
在这里插入图片描述
上图的队列中再填加一个元素,队列变成下面这个样子
在这里插入图片描述
此时再有一个元素入队,front == tail 此时 队列已满
为了与队列为空做区别
所以只剩下一个位置的时候,我们就可以认为此时队列已满,需要进行扩容操作.capacity中,浪费了一个空间
准确来说应该是 (tail + 1)%c等于front 表示队列满(c表示数组的长度)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值