Pilhas C/C++ - Pares e ímpares
Publicado por Diego Furtado (última atualização em 22/09/2009)
[ Hits: 9.655 ]
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--;
      }
}
Ajustando o sincronismo da legenda com o filme
Nenhum comentário foi encontrado.
IA Turbina o Desktop Linux enquanto distros renovam forças
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
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
Programa fora de escala na tela do pc (36)
Instalação dualboot Windows 11 e Debian 13 (0)
Eu queria adicionar a incon do wifi e deixa transparente no fluxbox no... (0)









