Круговые массивы в очередях - PullRequest
0 голосов
/ 23 октября 2010

Как мод используется для определения начала и конца кругового массива в очереди?

Ответы [ 2 ]

9 голосов
/ 23 октября 2010

Ну, обычно вы отслеживаете индекс первого элемента и текущий размер.Если размер равен размеру массива, это означает, что массив заполнен.Постановка в очередь нового элемента требует увеличения массива.В противном случае вы просто пишете элементу (start + size + 1) % array_size.

Когда вы удаляете с очереди элемент, вы просто берете элемент в start, перезаписываете его нулем, чтобы обеспечить сборку мусора, уменьшениеsize и с шагом start, при необходимости перенося в 0.

Альтернативой отслеживанию start и size является отслеживание start и next - где next - это индекс следующего элемента в очереди.Вы замечаете, заполнен ли массив, когда start == next.Тогда постановка в очередь (если она не заполнена) требует только изменения next, а снятие очереди требует только изменения start.Как и прежде, вам нужно обернуть, когда вы увеличиваете или уменьшаете start / next.

0 голосов
/ 23 октября 2010

В круговом массиве задняя часть очереди равна (front + number_of_elements_in_queue - 1) mod size_of_queue, и перед каждой очередью должна отслеживаться передняя очередь.

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