Pilhas C/C++ - Pares e ímpares
Publicado por Diego Furtado (última atualização em 22/09/2009)
[ Hits: 9.735 ]
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--;
}
}
Fwn - Formatador de arquivos .txt
Justificador de texto em 80 colunas
Exemplo de manipulação de arquivos
Nenhum comentário foi encontrado.
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Jogar games da Battle.net no Linux com Faugus Launcher
Como fazer a Instalação de aplicativos para acesso remoto ao Linux
Como fazer a instalação do Samba
Como fazer a conversão binária e aplicar as restrições no Linux
Duas Pasta Pessoal Aparecendo no Ubuntu 24.04.3 LTS (19)
Formas seguras de instalar Debian Sid (13)
Malware encontrado em extensões do Firefox. (0)
Fiz uma pergunta no fórum mas não consigo localizar [RESOLVIDO] (21)









