采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
有个问题没有想明白,扩容的前提是 (tail+1)%data.length == front 有这么一种情况,创建一个循环队列,传入容量是5,实际长度是6,在队列都是满的情况下,如果这个时候front的在位置索引1的情况下,再添加元素的时候, (tail+1)%data.length == front这个公式是成立的,就进行扩容,那如果队首的位置在0,队尾的位置在4,这个时候再添加元素,也是应该进行扩容的,因为我们始终是要浪费一个空间,但是这个时候公式是不成立的
永远不会容量是5,队首是0,队尾是4的情况。
因为在队首是0,对尾是3的时候,添加下一个元素入队,就已经扩容了。之后,容量为10,队首是0,队尾是4:)
tail位置的计算公式应该就是(tail+1)%data.length,队首是0,队尾是3,这个时候tail指向的应该是4,再添加元素的时候是先判断(4+1)%6 == front,length是6对吧,这个应该没有错,那么5%6不会是0啊,是我脑子转不过来,还是我计算错误了
容量不是5吗?6是哪里来的?你添加6个元素,只是执行6次add而已,6不会进入这个公式。实际创建一个初始容量为5的队列,让后往里添加6个元素,试试看?跟踪一下,在每一步,front,tail,size各个变量是如何变化的?加油!
老师,我传入的容量是5,但队列实际长度不应该是6么
登录后可查看更多问答,登录/注册
动态数组/栈/队列/链表/BST/堆/线段树/Trie/并查集/AVL/红黑树…
10.3k 16
1.4k 17
1.3k 14
1.2k 14