Binary Road
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Pilha - (Push)

Ir para baixo

Pilha - (Push) Empty Pilha - (Push)

Mensagem  Renancr Ter 10 maio 2011 - 23:36

Pilha com lista dinamica


Código:
#include <iostream>
using namespace std;

struct pilha
         {
            int info;
            pilha *prox;
         };

typedef struct pilha l;

pilha *inicializa();
int menu();
pilha *push(pilha *topo, int decimal);
pilha *remove(pilha *topo);
pilha *request_new(pilha *celula_ant);
pilha *pop(pilha *topo);

void main()
{
   pilha *topo;
   int op, x;

   topo=inicializa();
   do{

      op=menu();

      if(op == 1)
      {
         system("cls");
         cout<< "\n\nDigite o valor em decimal para coverte-lo em binario\n\t";
         cin>> x;
         topo=push(topo, x);
         system("pause");
      }
      else
         if(op == 2)
         {
            system("cls");
            if(topo != NULL)
               topo=pop(topo);
            else
               cout<< "\n\n\nA pilha esta vazia, nem um valor convertido ainda\n\n\n";
            system("pause");
         }

   }while(op != 3);
}

int menu()
{
   int op;

   do{
      system("cls");
      cout<< "\t1- Conveter de decimal para binario (push)\n";
      cout<< "\t2- Imprimir (pop)\n";
      cout<< "\t3- Sair\n";
      cout<< "\n\tDigite a opcao desejada\n\t";
      cin>> op;
      if(op < 1 || op > 3)
      {
         system("cls");
         cout<< "\n\n\nO valor de sua opcao nao corresponde ao menu\n\n\n";
         system("pause");
      }
   }while(op < 1 || op > 3);

   return op;
}

pilha *inicializa()
{
   return NULL;
}

pilha *push(pilha *topo, int decimal)
{
   int resto=0, val=decimal;

   if(topo != NULL)
   {
      topo=remove(topo);
      while(val >= 2)
      {
         topo=request_new(topo);
         resto= val % 2;
         topo->info=resto;
         val= (val-resto)/2;
      }
      topo=request_new(topo);
      topo->info=val;
   }
   else
   {
      while(val >= 2)
      {
         topo=request_new(topo);
         resto= val % 2;
         topo->info=resto;
         val= (val-resto)/2;
      }
      topo=request_new(topo);
      topo->info=val;
   }
   return topo;
}

pilha *remove(pilha *topo)
{
   pilha *p=topo->prox, *pp;

   while(p != NULL)
   {
      pp=p->prox;
      free(p);
      p=pp;
   }

   free(topo);

   return NULL;
}

pilha *request_new(pilha *celula_ant)
{
   pilha *novo;
   novo=(pilha*) malloc (sizeof(pilha));
   novo->prox=celula_ant;
   return novo;
}

pilha *pop(pilha *topo)
{
   pilha *ant;
   while(topo != NULL)
   {
      cout<< topo->info << endl;
      ant=topo;
      topo=topo->prox;
      free(ant);
   }
   return topo;
}
Renancr
Renancr

Mensagens : 118
Data de inscrição : 08/03/2010

Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos