Ввёл дополнительный параметр - длина очереди (для проверок на пустоту/переполнение), как красиво без него обойтись - не придумал.
Судя по результату программы Вы используете push_allocator и pop_allocator (либо аналогичную реализацию). Изначально оба указывают на array[0]. Причем для любого из них, после array[4] идет array[0]. Если после добавления элемента выполняется условие push_allocator == pop_allocator - то очередь полна. Так же, если после изъятия элемента выполняется условие pop_allocator == push_allocator, то очередь пуста;