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 . Se for, incrementamos a variável contadora. Em seguida empilhamos esse valor na pilha auxiliar.
Percorremos a pilha original enquanto ela não estiver vazia: retiramos o topo com pop, checamos se é ímpar usando a condição
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);
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;
}