почему мы должны использовать (тыл + 1)% емкости в очереди в Java? - PullRequest
0 голосов
/ 06 июня 2018
  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?

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Это сделано для реализации циклической очереди, то есть для возврата к началу массива каждый раз, когда задние или головные счетчики достигают конца массива.

Когда задний счетчик меньше длины массива, задний% длина =Rear.

Когда задний счетчик равен длине массива, задний% длины дает 0, а задний счетчик переходит на следующий круг.

Наконец, когда задний элемент больше длины массива, задний% длинывернет значение, меньшее длины массива и равное задаче - (array.length * количество пройденных окружностей).

Таким образом, путем деления задней части по длине мы получим остаток, который является следующей позицией для элемента, которыймы хотим поместить в конец очереди.

0 голосов
/ 06 июня 2018

В односторонней очереди такой концепции нет.Я предполагаю, что вы имеете дело с Circular Queue.this.rear = (this.rear + 1)%this.capacity; используется для указания задней части на индекс rear+1'th.(особенно когда тыл достиг позиции (n-1)th.)

например, : array[10] т.е. capacity = 10 и rear 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 index

  2. Аналогично, когда when rear = 2

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

и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...