2010-10-23 3 views

ответ

9

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

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

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

0

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

-1

Это может помочь взглянуть на функцию wrapIndex по строке 28 в this example. wrapIndex (head) - начало (см. строку 93), а wrapIndex (tail) - это конец (см. строку 76).

+0

Вы, кажется, ссылаетесь на несколько муз. Вы связаны с ним? –

Смежные вопросы