Какова точка остатка операнда в очереди кругового массива - PullRequest
0 голосов
/ 26 февраля 2019

Я смотрю, как пишется очередь круглого массива, и часть метода enqueue сбивает меня с толку, в частности, часть, где переменная back становится (back+1) % SIZE

void enqueue(char x) {
    Q[back] = x
    back = (back+1) % SIZE;
}

Чтосмысл получать остаток?Я не понимаю(массив называется Q, int front = -1, int back = 0 и int size = 0)

1 Ответ

0 голосов
/ 26 февраля 2019

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

Действительные индексымассив от 0 до SIZE - 1 (при условии SIZE == Q.length).

Следовательно, после добавления элемента в Q[back == SIZE-1] задняя часть очереди должна стать (back+1) % SIZE == (SIZE-1+1) % SIZE == 0.

PS Я не уверен, что вы включили полный код метода enqueue.Похоже, вы не проверяете, заполнена ли очередь, прежде чем добавлять новый элемент.

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