Если указатель хвоста указывает на следующий элемент для заполнения (и без элемента «всегда пусто»), есть два условия, которые мы не можем отличить друг от друга.Это условия «очередь заполнена» и «очередь пуста», в обоих случаях голова и хвост имеют одно и то же значение.
H,T
+---+---+---+---+---+
empty: | - | - | - | - | - |
+---+---+---+---+---+
+---+---+---+---+---+
full: | 5 | 1 | 2 | 3 | 4 |
+---+---+---+---+---+
H,T
Это много, что вы уже знаете, основываясь на вашем вопросе.
Однако, если бы вы использовали хвостовой указатель для указания на последний заполненный элемент, вы бы все же не смогли бы различить два условия.
Это связано с тем, что в одноэлементной очереди заголовок и хвост будут равны, поэтому для представления пустой очереди хвост будет равен одному перед заголовком (если вы этого не сделали, «очередь пуста»условия "и" очередь с одним элементом "были бы неразличимы).К сожалению, это также имеет место, если вы полны:
T H
+---+---+---+---+---+
empty: | - | - | - | - | - |
+---+---+---+---+---+
+---+---+---+---+---+
full: | 5 | 1 | 2 | 3 | 4 |
+---+---+---+---+---+
T H
Суть в том, что голова и хвост не вполне достаточно информации, чтобы однозначно идентифицировать все условия независимо откакую схему вы выберете, поэтому есть пустая ячейка.
Вы можете делать это так, как вы хотите (хвост указывает на последнюю заполненную ячейку, а не на следующую ячейку, которая будет заполнена), новам будет все еще нужна пустая ячейка, чтобы различать пустые и полные случаи.
Конечно, вы можете решить эту проблему, введя count дляструктура данных, а также.Если у вас есть это, вы можете легко различать случаи (в обоих сценариях).