Pilhas C/C++ - Pares e ímpares

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

[ Hits: 7.495 ]

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 : [email protected]
/// 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

Busca binária

[C] Apaga linha em um Arquivo

Faça um programa em c++ gere um arquivo e depois leia usando um gerador de numeros do tipo s

Extract

Programa CONSULTA/ PESQUISA/ ADICIONA/ EXCLUI registros em arquivos


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts