O que acontece com a fila considerando a seguinte sequência de operações sobre um fila IEIEIEIEIE. (I - inserção e E - eliminação)
A fila terá sempre 1 ou 0 elementos, no entanto num certo instante:
Ou seja, apenas um elemento na fila, o qual ocupa a última posição do array!
Na próxima inserção, teremos uma condição de overflow e a fila está vazia !
Alternativa: no algoritmo de eliminação após a atualização de Começo, verificar se a fila ficou vazia, i.e, Começo = Fim; se este for o caso, reinicializar Começo = Fim := 0;
Portanto, ficaria:
Procedure Eliminar (Var Começo, Fim: indice); Begin If ( Começo = Fim) Then {FILA VAZIA} Else Begin Começo := Começo + 1; If Começo = Fim Then Begin Começo := 0; Fim := 0; End; End; End;
O que aconteceria se a sequência fosse IIEIEIEIEI...
A lista estaria com no máximo dois elementos, mas ainda ocorreria overflow com a lista quase vazia.
Alternativa:Forçar Fim a usar o espaço liberado por Começo (Fila Circular)