在现有循环队列实例下,如何使断言tail<front成立?
来源:3-7 循环队列的实现
慕前端8962423
2019-10-17
波波老师好,我这边按照课程上的思路,实现了循环队列的逻辑,传送门:LoopQueue
我的问题是,我们实现循环队列的前提是充分利用数组空间,也就是说,只有在循环队列里出现过tail<front
的情况,循环队列才有它自己的意义,但是在测试过程当中发现,出于保证数组安全
和节约空间
的考虑,会根据情况进行resize
操作并随之重排tail
和front
,进而导致tail>=front
,那么,在什么情况下才能出现tail<front
使逻辑自洽呢?
单元测试代码表述如下:
@Test
public void test_tail_lt_front() throws NoSuchFieldException, IllegalAccessException {
LoopQueue<Integer> queue = null;
//TODO begin
// queue = new LoopQueue<>(?);
// ...
// ...
// end
Field tailField = LoopQueue.class.getDeclaredField("tail");
tailField.setAccessible(true);
int tail = (Integer) tailField.get(queue);
Field frontField = LoopQueue.class.getDeclaredField("front");
frontField.setAccessible(true);
int front = (Integer) frontField.get(queue);
Assert.assertTrue(tail < front);
}
写回答
1回答
-
我不确定我是不是正确理解了你的问题。我理解你的问题是,在什么情况下,循环队列中会出现 tai < front?
1)先将队列中填满元素
2)从队首取出任意多元素。
3)再向队列添加元素,因为之前队列满了,所以索引大的数组空间已经没有位置了,只能从索引 0 开始继续添加,此时,tail 就小于 front 了。
继续加油!:)
012019-10-17
相似问题
front,tail的问题
回答 1
关于循环队列中浪费一个空间的说法
回答 2