java - 为什么我们必须在 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中制作入队函数时?
解决方案
它是为了实现循环队列,即每次后计数器或前计数器到达数组末尾时返回数组的开头。
当后计数器小于数组的长度时,后 % 长度 = 后。
当后计数器等于阵列的长度时,后百分比长度为 0,后计数器在下一圈继续。
最后,当后部大于数组的长度时,后部 % 长度将返回小于数组长度并等于后部的值 - (array.length * 传递的圈数)。
因此,通过按长度除后,我们得到余数,这是我们要放置在队列末尾的元素的下一个位置。
推荐阅读
- amazon-web-services - JPA 无法从 Beanstalk 连接到 AWS RDS,但它可以在本地工作
- r - 具有汇总组合的多级聚合
- javascript - 转换 CSV 数据以便在类内访问
- c# - Cefsharp 计数鼠标点击控制
- python - Selenium:一旦元素被禁用就停止循环
- javascript - 在 Javascript 中使用 for 循环的 HTML 标记是否比普通的 HTML 标记慢?
- azure-active-directory - 如何更新 MS Graph 客户端服务主体 AppRoleAssignments
- flutter - 如何在 Flutter web 中确定国家代码
- user-interface - 你把这种设计叫做什么?
- android - 第三方 jar 文件中的 .so(共享库)无法进入 android studio 中的 apk 其他所有内容都进入其中