Faça uma função para retornar o número de elementos da fila que possuem valor par.

Passo 1

O enunciado pede para construir uma função que receba uma fila de inteiros e retorne quantos elementos dessa fila têm valor par. Estamos em Estruturas de Dados, mais especificamente trabalhando com filas e percorrimento de seus elementos.

Passo 2

Para não perder os dados originais da fila durante a varredura, vamos usar uma fila auxiliar. A ideia é retirar cada elemento da fila original, verificar se é par, atualizar um contador e então enfileirar esse mesmo elemento na fila auxiliar.
Depois de processar todos os elementos, a fila original ficará vazia e a fila auxiliar conterá todos os elementos na mesma ordem. Só falta transferir da fila auxiliar de volta para a original, restaurando-a ao estado inicial.

Passo 3

Implementamos as operações básicas: isEmpty(fila) para testar vazio, dequeue(fila) para remover e retornar o elemento do front, enqueue(fila, valor) para inserir ao final, e createQueue() para inicializar uma fila vazia.

Passo 4

No laço principal, enquanto a fila original não estiver vazia, fazemos dequeue, checamos paridade com
valor bmod 2 == 0
e incrementamos o contador se for par. Cada valor removido vai para a fila auxiliar. Em seguida, outro laço esvazia a fila auxiliar movendo tudo de volta para a original.

Passo 5

Ao final, retornamos o contador de valores pares.

Resposta

int countEven(Queue *q) {
Queue aux = createQueue();
int count = 0;
// Percorre todos os elementos da fila original
while (!isEmpty(q)) {
    int x = dequeue(q);
    if (x % 2 == 0) {
        count++;
    }
    enqueue(&aux, x);
}

// Restaura a fila original
while (!isEmpty(&aux)) {
    enqueue(q, dequeue(&aux));
}

return count;
}

Exercícios relacionados