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