为什么我们必须在java中使用(后+ 1)%的容量?

时间:2018-06-06 17:17:37

标签: java data-structures queue

select b.extra_column
      ,b.department_id
      ,b.department_name
      ,b.manager_id
      ,b.location_id
      ,c.employee_id
      ,c.first_name
      ,c.last_name
      ,c.email
      ,c.phone_number
      ,c.hire_date
      ,c.job_id
      ,c.salary
      ,c.commission_pct
      ,c.manager_id
      ,c.department_id
      ,a.location_id
      ,a.street_address
      ,a.postal_code
      ,a.city
      ,a.state_province
      ,a.country_id
  from departments b
    ,locations a
    ,employees c
 where a.location_id = b.location_id
   and c.employee_id = b.manager_id
   and b.department_id = c.department_id;

问题是 - 为什么我们必须这样做this.rear =(this.rear + 1)%this.capacity;在java中创建一个enqueue函数?

2 个答案:

答案 0 :(得分:0)

在单端队列中没有这样的概念。我会假设您正在处理Circular Queuethis.rear = (this.rear + 1)%this.capacity;用于将后方指向rear+1'th索引。 (特别是当后方已到达(n-1)th位置时。)

例如 array[10]capacity = 10rear is at arr[9]arr[0..x] (where x<=(n-1))为空

在这种情况下,队列应该允许插入,因为数组中仍有空的空间。为此,应用公式

  1. rear = 9

    this.rear = (this.rear + 1)%this.capacity;

    即。 this.rear = (9 + 1)%10 = 0即插入0'th索引

  2. 同样在when rear = 2

    this.rear = (2 + 1)%10 = 3

  3. 等等

答案 1 :(得分:0)

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

当后计数器小于阵列长度时,后部%长度=后部。

当后计数器等于阵列的长度时,后部%长度为0,后部计数器在下一圈进行。

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

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