Pilhas C/C++ - Pares e ímpares
Publicado por Diego Furtado (última atualização em 22/09/2009)
[ Hits: 9.483 ]
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--; } }
Conversão integral de textos em letras maiúsculas
Programinha que busca arquivos
Números de caracteres em arquivo
Contando a quantidade de palavras de um arquivo texto
Nenhum comentário foi encontrado.
Instalar e Configurar o Slackware Linux em 2025
Como configurar os repositórios do apt no Debian 12 em 2025
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Configurando o Conky para iniciar corretamente no sistema
3 configurações básicas que podem melhorar muito a sua edição pelo editor nano
Como colorir os logs do terminal com ccze
Instalação Microsoft Edge no Linux Mint 22
Como configurar posicionamento e movimento de janelas no Lubuntu (Openbox) com atalhos de teclado
Linux Mint limitando rede a 20Mbps (4)
Linux Mint não conecta Wi-Fi sem fio (15)
Backup de arquivos no Mint (2)
Por que programação de baixo nível e tão comum no Linux do que no wind... (2)