我在阅读本书时完全理解了整个代码,但我不了解方法中的某个条件。
背景:目标是使用“数组”实现队列,而不使用计数变量来跟踪项目,而是将大小n设置为n + 1,并依靠前后获取值。
public boolean isEmpty() // true if queue is empty {
return ( rear+1==front || (front+maxSize-1==rear) );
}
我尽力在return语句中跟踪第二个条件,但我无法得到它。 (前+ maxSize-1 ==后)
有人可以提供一些帮助吗?
答案 0 :(得分:1)
您的内部array
尺寸为maxSize
想象一下当你的队列中有一个元素并且front
和rear
都指向数组的最后一个插槽时的情况。
即
front == rear == maxSize - 1;
当您弹出()最后一个元素时,您的front
将会循环播放#34;移动到索引0,您的队列应该变空。
但由于您的rear
不会在pop()上移动,因此它仍为maxSize - 1
。
后一个条件front+maxSize-1==rear
正好捕捉到这种特殊情况(因为front
小于rear
,因此与第一个条件不匹配)
<强> 修改 强> 要将您的条件合二为一,您可以写下:
// true if rear is one "step" behind front
public boolean isEmpty() {
return (rear + 1) % maxSize == front; // based on suggestion of @eckes
}
希望很清楚。