圆形队列中的isEmpty()没有计数方法/

时间:2014-10-25 18:16:02

标签: java

我在阅读本书时完全理解了整个代码,但我不了解方法中的某个条件。

背景:目标是使用“数组”实现队列,而不使用计数变量来跟踪项目,而是将大小n设置为n + 1,并依靠前后获取值。

public boolean isEmpty() // true if queue is empty {
     return ( rear+1==front || (front+maxSize-1==rear) );
}

我尽力在return语句中跟踪第二个条件,但我无法得到它。 (前+ maxSize-1 ==后)

有人可以提供一些帮助吗?

1 个答案:

答案 0 :(得分:1)

您的内部array尺寸为maxSize 想象一下当你的队列中有一个元素并且frontrear都指向数组的最后一个插槽时的情况。 即

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
}

希望很清楚。