Pilhas C/C++ - Pares e ímpares

Publicado por Diego Furtado (última atualização em 22/09/2009)

[ Hits: 9.394 ]

Download par.impar.c




Empilhando números pares e impares e mostrando na tela separadamente.

  



Esconder código-fonte

/// 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--;

      }

}

Scripts recomendados

não achei o erro

Controle de Funcionários (Básico)

read_log_conf

Organizador de filmes para o IMDB

[C] Apaga linha em um Arquivo


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts