Вы ничего не говорите о том, что идет не так, так что это выстрел в темноте, а не обсуждение выбранной структуры данных.
Тест size == 0
кажется бесполезным, размер не будет нулевым сразу после enqueue
. Однако то, что вы делаете, говорит о том, что вы делаете, когда происходит удаление, вероятно, верните элемент в front
с шагом front
и уменьшением size
.
Итак, несколько замечаний
- Удивительно, что звонки растут превентивно, для следующего звонка
ставить в очередь, что может никогда не произойти. Вы, вероятно, должны сделать это на
самое начало очереди, когда вам не хватает места
- Ваши данные перемещаются вправо от массива по мере удаления из очереди и повторной постановки в очередь. Таким образом, даже в очереди с очень небольшим количеством элементов (размер маленький), элементы могут располагаться по правому краю массива, и вам может не хватить места. Тест на рост (или, по крайней мере, на то, чтобы что-то сделать) должен быть сзади, а не по размеру.
- Как следствие, вам, возможно, придется расти или, по крайней мере, что-то делать, даже если в массиве гораздо больше места, чем необходимо. Если массив почти заполнен, вы должны действительно расти (даже если осталось немного места, в противном случае вы рискуете циклами постановки / снятия с очереди, чтобы продолжить копирование всех значений и заставить ваши показатели идти O (N)) Но если есть много свободного места, вы должны просто переместить элементы обратно в начало массива.
Резюме: в начале очереди, если задняя часть имеет длину массива, вы должны
- если размер меньше, чем, скажем, половина пространства, скопируйте элементы в начало массива, front = 0, back = size
- если размер больше, выделить новый массив и скопировать элементы в начале нового массива