首页 > 解决方案 > 为什么我们必须在 java 的 enqueue 中使用 (rear+1)%capacity?

问题描述

  void enqueue( int item)
{
    if (is Full(this))
        return;
    this.rear = (this.rear + 1)%this.capacity;
    this.array[this.rear] = item;
    this.size = this.size + 1;
    System.out.println(item+ " enqueued to queue");
}

问题是 - 为什么我们必须这样做 this.rear = (this.rear + 1)%this.capacity; 在java中制作入队函数时?

标签: javadata-structuresqueue

解决方案


它是为了实现循环队列,即每次后计数器或前计数器到达数组末尾时返回数组的开头。

当后计数器小于数组的长度时,后 % 长度 = 后。

当后计数器等于阵列的长度时,后百分比长度为 0,后计数器在下一圈继续。

最后,当后部大于数组的长度时,后部 % 长度将返回小于数组长度并等于后部的值 - (array.length * 传递的圈数)。

因此,通过按长度除后,我们得到余数,这是我们要放置在队列末尾的元素的下一个位置。


推荐阅读