Pilha Encadeada

Publicado por Ricardo Rodrigues Lucca 02/07/2003

[ Hits: 23.153 ]

Homepage: http://aventurasdeumdevop.blogspot.com.br/

Download pilha.cpp




Um exemplo de pilha encadeada.

  



Esconder código-fonte

//    Programador: Ricardo Lucca

#include "tela.h" //Declarado para se ter clrscr() e a stdio.h
#include <stdlib.h> //uso para malloc

#define dgetchar() getchar();getchar();

struct nodo 
{
   int elem;
   struct nodo *prox;
} *topo, *aux;

bool vazio(struct nodo *campo)
{
   
   if ( campo == NULL ) 
      return true;
   else
      return false;
}

void insere(void)
{
   int x;

   printf("\nEntre com o numero a inserir: ");
   scanf(" %i", &x);
   
   aux=(struct nodo *) malloc(sizeof(aux));
   aux->elem=x;
   aux->prox=topo;
   topo=aux;
   
   printf("\nElemento inserido!");
   dgetchar();
}

void removr(void)
{
   if (vazio(topo))
   {
   aux=topo;
   topo=topo->prox;
   free(aux);

   printf("\nRemovido com sucesso!");
   dgetchar();
   }
}

void listar(void)//faz uma busca como c fosse um vetor
{
   if (!vazio(topo)) ;
   else 
   {
      aux=topo;
      for (;(topo->prox)!=NULL;topo=topo->prox) 
         printf("%i\n",topo->elem);
      printf("%i",topo->elem);
          
      printf("\nTecle algo...");
      dgetchar();
      topo=aux;
   }
}

int main(void)
{
   char op;
   int sair=0;

   topo=NULL;
   for (;sair==0;)
   {
      clrscr();
      printf("1 -> Insere na pilha\n2 -> Remove da pilha\n");
      printf("3 -> Listar pilha\n4 -> Sair da pilha\n");
      printf("\nDigite uma opção: ");
      scanf(" %c", &op);
      switch (op)
      {
         case '1': insere(); break;
           case '2': removr(); break;
         case '3': listar(); break;
         case '4': sair=1; break;
         default:  {
              printf("Opção invalida! \n");
              getchar(); getchar();
              break;
              }
      }
   }
   
   return 0;
}

Scripts recomendados

Identificando Palíndromos

Desenhando uma curva Dragão ou o Fractal Jurassic Park

Lista Circular

Retorna o tempo ocioso em uma sessão do X

Introdução a Recursão


  

Comentários
[1] Comentário enviado por kmash em 04/05/2011 - 10:11h

ou também:

//ESTRUTURA PILHA ENCADEADA

//Arquivo: pilha.h (biblioteca)

struct tnodo{
int item;
tnodo *prox;
};

struct stack{
tnodo *top;
};

//PROTOTIPOS
void init (stack *p);
int empty(stack *p);
void push(stack *p,int x);
int pop(stack *p);

/////////////////////////////////////////
//Arquivo: pilha.cpp

//Implementando operações

#include<stdio.h>
#include "pilha.h"

//init: faz a pilha ficar vazia (criando um nodo cabeça e fazendo o top apontar para ele
void init(stack *p)
{
p->top=new tnodo; //alocando memoria
p->top->prox=NULL; //iniciando pilha (pilha vazia por que o nodo 1 está NULL, NULL =fim da pilha
}

//empty: retorna 1 se a pilha esá vazia, caso contrário, retorna 0.
int empty(stack *p)
{
if (p->top->prox==NULL)
return 1;
else return 0;
}

//push: insere o item x no topo da pilha p
void push(stack *p,int x)
{
tnodo *aux;
aux=new tnodo;
aux->prox=p->top;
p->top->item=x;
p->top=aux;
}

//pop: retorna o item que está no topo da pilha p retirando-o da mesma
int pop(stack *p)
{
if(empty(p)){
printf("Erro: pilha vazia\n");
exit(1);
}
else{
aux=p->top;
p->top=p->top->prox;
delete aux;
return(p->top->item);
}

//printfStack: imprime os itens da pilha p
void printStack(stack *p)
{
tnodo *aux=p->top->prox;
while(aux!=NULL)
{
printf("%d\n",aux->item);
aux=aux->prox;
}
}


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts