Pilhas C/C++ - Pares e ímpares
Publicado por Diego Furtado (última atualização em 22/09/2009)
[ Hits: 9.646 ]
Empilhando números pares e impares e mostrando na tela separadamente.
/// AUTOR : Diego Furtado de Souza
/// EMAIL : dsouza.bh@gmail.com
/// Espaço VOL : http://www.vivaolinux.com.br/~diegofsouza
#include <stdio.h>
#include <stdlib.h>
typedef int TipoChave;
typedef struct CelulaStr *Apontador;
typedef struct {
TipoChave Chave;
} TipoItem;
typedef struct CelulaStr {
TipoItem Item;
Apontador Proximo;
} Celula;
typedef struct {
Apontador Fundo, Topo;
int Tamanho;//Sempre será int, por isso não se usa o typedef
}TipoPilha;
void Empilha (TipoItem , TipoPilha *);
void Desempilha (TipoItem *, TipoPilha *);
void FpVazia (TipoPilha *);
bool Vazia (TipoPilha);
int main () {
int valor, numeros;
TipoPilha pilhaPar, pilhaImpar; //Pilha
TipoItem itemPar, itemImpar;
FpVazia(&pilhaPar);
FpVazia(&pilhaImpar);
printf("Quantos numeros deseja digitar? ");
scanf("%d", &numeros);
printf("Digite os valores:\n");
for (int i = numeros ; i > 0; i--) { //Empilhando os valores.
scanf("%d", &valor);
if (!(valor % 2)) { // Coloca o valor impar ou par na Chave e empilha
itemPar.Chave = valor;
Empilha(itemPar, &pilhaPar);
}
else {
itemImpar.Chave = valor;
Empilha(itemImpar, &pilhaImpar);
}
}//Fim Empilhamento.
printf("Valores Pares : ");
for (int i = pilhaPar.Tamanho; i > 0; i--) { //Desempilhando valores pares e mostrando na tela
Desempilha(&itemPar, &pilhaPar);
printf("%d ", itemPar.Chave);
}
printf("\nValores Impares : ");
for (int i = pilhaImpar.Tamanho; i > 0; i--) { //Desempilhando e mostrando os valores impares
Desempilha(&itemImpar, &pilhaImpar);
printf("%d ", itemImpar.Chave);
}
return 0;
}
void FpVazia (TipoPilha *Pilha) {
Pilha->Topo = (Apontador) malloc(sizeof(Celula));
Pilha->Fundo = Pilha->Topo;
Pilha->Topo->Proximo = NULL;
Pilha->Tamanho = 0;
}
void Empilha (TipoItem x, TipoPilha *Pilha) {
Apontador Aux;
Aux = (Apontador) malloc (sizeof (Celula));
Pilha->Topo->Item = x;
Aux->Proximo = Pilha->Topo;
Pilha->Topo = Aux;
Pilha->Tamanho++;
}
bool Vazia (TipoPilha Pilha) {
return (Pilha.Topo == Pilha.Fundo);
}
void Desempilha(TipoItem *Item, TipoPilha *Pilha) {
Apontador Aux;
if (Vazia(*Pilha)) {
printf("Pilha Vazia!\n");
return;
}
else {
Aux = Pilha->Topo;
Pilha->Topo = Aux->Proximo;
*Item = Aux->Proximo->Item;
free(Aux);
Pilha->Tamanho--;
}
}
Compactando arquivos de log *.txt
Copia uma linha selecionada para um arquivo secundário
Nenhum comentário foi encontrado.
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Novos apps de produtividade, avanços em IA e distros em ebulição agitam o universo Linux
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
Assinador JNLP do Site Portal da Nota Fiscal Eletrônica (0)
Programa fora de escala na tela do pc (29)
É normal não gostar de KDE? (9)









