Pilhas C/C++ - Pares e ímpares
Publicado por Diego Furtado (última atualização em 22/09/2009)
[ Hits: 9.762 ]
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--;
}
}
Editar o arquivo /etc/rc.d/rc.local
Exemplo de manipulação de arquivos
hexfile - conversor de binario/hexadecimal
Nenhum comentário foi encontrado.
Gentoo binário em 2026: UEFI, LUKS, Btrfs e Systemd
Trabalhando Nativamente com Logs no Linux
Jogando Daikatana (Steam) com Patch 1.3 via Luxtorpeda no Linux
LazyDocker – Interface de Usuário em Tempo Real para o Docker
Curso GRÁTIS: OCS Inventory NG - Do Deploy ao Hardening com foco em Segurança da Informação!
Instalando fontes via script no Nautilus Scripts no Gnome do Debian 13
VirtualBox no Ubuntu 25.10 sem redimensionam... automatico. (1)
Instalar Linux em notebook Sony Vaio VPCEG13EB (2)
GLPI Não atualiza Inventario (0)









