Desenvolva uma função para testar se uma fila F1 tem mais elementos do que uma fila F2.
Passo 1
O enunciado pede para criar uma função que compare duas filas F1 e F2 e retorne verdadeiro se F1 tiver mais elementos do que F2. Isso envolve manipulação de filas e contagem de seus elementos sem perder os dados originais.
Passo 2
Para contar os elementos de uma fila sem destruí-la, vamos usar uma fila auxiliar. O processo é: enquanto a fila original não estiver vazia, retiramos um elemento (desenfileirar), incrementamos nosso contador, e colocamos esse elemento na fila auxiliar (enfileirar). Quando terminarmos, a fila original estará vazia e a auxiliar conterá todos os elementos nessa mesma ordem. Em seguida, transferimos de volta todos os elementos da fila auxiliar para a original, restaurando seu estado.
Passo 3
Aplicamos esse procedimento separadamente em F1 e em F2, obtendo dois contadores count1 e count2. Basta então comparar count1 e count2. Se count1 for maior que count2, retornamos verdadeiro; caso contrário, falso.
Passo 4
Vamos agora implementar a função em pseudocódigo (estilo C), supondo que temos as operações básicas de filas: filaVazia(f), desenfileirar(f), enfileirar(f, x).
Resposta
bool filaMaior(Fila &F1, Fila &F2) {
Fila aux1, aux2;
int count1 = 0, count2 = 0;
Fila aux1, aux2;
int count1 = 0, count2 = 0;
// Conta elementos de F1
while (!filaVazia(F1)) {
int x = desenfileirar(F1);
count1++;
enfileirar(aux1, x);
}
// Restaura F1
while (!filaVazia(aux1)) {
enfileirar(F1, desenfileirar(aux1));
}
// Conta elementos de F2
while (!filaVazia(F2)) {
int y = desenfileirar(F2);
count2++;
enfileirar(aux2, y);
}
// Restaura F2
while (!filaVazia(aux2)) {
enfileirar(F2, desenfileirar(aux2));
}
return (count1 > count2);
}