В реализации массива круговой очереди, если мы указываем перед слотом перед первым элементом и сзади до последнего элемента, мы сталкиваемся с проблемой определения того, заполняется ли очередь или пустой.Полное/пустое различие буфера в круговой очереди
Для решения этой проблемы мы используем либо счетчик, либо пустое место в буфере.
Я думал о следующем подходе. Пожалуйста, поправьте меня, где я ошибаюсь, и если не сообщите мне, если это лучшее/худшее решение, чем выше.
1) Направьте фронт первого элемента & сзади к последнему элементу 2) имеют функцию, чтобы проверить, если очередь имеет левый 3) Если мы dequeing последний элемент, сделать только один элемент спереди и сзади - 1. 4) IsEmpty() будет справедливо, если оба передних & сзади находятся -1 5) isFull будет справедливо, если передняя = (задний + 1)% размер
Однако неподписанный int имеет верхнюю границу. Когда он достигает верхней границы, только бог знает, что произойдет. – guo
@guo: точка использования 'unsigned' заключается в том, что ее поведение при переполнении хорошо определено стандартом C. – jxh