Faça uma função para retornar o número de elementos da pilha que possuem valor ímpar.

Passo 1

O problema quer uma função que conte quantos elementos ímpares existem em uma pilha, sem perder os dados originais. O conteúdo é estrutura de dados (pilha) e vamos precisar das operações básicas: isEmpty, pop e push, além de uma pilha auxiliar para restaurar a original.

Passo 2

Criaremos uma variável contadora inicializada em zero e uma pilha auxiliar vazia. A contadora vai acumular quantos valores ímpares encontramos.
Percorremos a pilha original enquanto ela não estiver vazia: retiramos o topo com pop, checamos se é ímpar usando a condição x bmod 2 neq 0. Se for, incrementamos a variável contadora. Em seguida empilhamos esse valor na pilha auxiliar.

Passo 3

Depois que a pilha original estiver vazia, precisamos restaurar sua ordem. Enquanto a pilha auxiliar não estiver vazia, fazemos pop nela e push de volta na pilha original.

Passo 4

Ao final, a pilha original está exatamente como era e a variável contadora tem o número de elementos ímpares. Retornamos esse valor.

Resposta

// Pseudocódigo em estilo C
int contarImpares(Pilha *p) {
int contador = 0;
Pilha aux;
init(&aux);
// Esvazia p e conta ímpares
while (!isEmpty(p)) {
    int x = pop(p);
    if (x % 2 != 0) {
        contador++;
    }
    push(&aux, x);
}

// Restaura p
while (!isEmpty(&aux)) {
    push(p, pop(&aux));
}

return contador;
}

Exercícios relacionados