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;
// 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);
}

Exercícios relacionados