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)