请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

capacity+1的问题

老师好,代码中有一段是这么写的:
public LoopQueue(int capacity){
data = (E[])new Object[capacity + 1];
您说的意思是有意浪费一个空间,但是您举得例子里,是索引为0到7,capacity为8的数组,只是在第一次循环的时候尾部又到了索引1的位置,这个时候空了一个元素,但是它的capacity还是8,并不是9。所以我没太明白为什么初始化构造方法的时候capacity要加1?

正在回答 回答被采纳积分+3

1回答

liuyubobobo 2021-01-30 00:10:42
public LoopQueue(int capacity){    
    data = (E[])new Object[capacity + 1];
}


这段逻辑,使得如果传入的 capacity 是 8,data 实际开的空间就是 9。capacity 不会在添加和删除元素的时候有变化(除非触发 resize)。


让 capacity + 1 的意义是,对于循环队列,区分“队列为空”和“队列为满”的逻辑。


我的建议是,你尝试一下,不使用 size,也不使用 capacity + 1,自己按照自己的想法,实现一下循环队列,看看会有什么问题。尤其专注思考一下,在这种情况下,如果判断队列元素为空,逻辑是怎样的?如果判断队列元素满了,逻辑是怎样的?怎么区分这二者?


再回过头来看,课程的代码是怎么解决这个问题的?


值的一提的是,如果使用 size,确实是可以不容量 + 1 的,可以参考这里:https://coding.imooc.com/learn/questiondetail/70227.html


继续加油!:)

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号