#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct pilha
{
 char caractere;
 struct pilha *prox;//neste caso o proximo aponta para o anterior
} *no, *topo ;

//Chamado de PUSH p/ a Pilha (Stack)
struct pilha *insere(char carac)
{
 if((no = (struct pilha*) malloc(sizeof(struct pilha))) != NULL)
 {
  (*no).caractere = carac;
  (*no).prox = topo;
  topo = no;
 }
 return no;
}

//Chamado de POP p/ a Pilha (Stack)
char retira(void)
{
 char desempilhado =' ';
 struct pilha *aux;
 if(topo)//se topo aponta p/ NULL retorna falso
 {
  desempilhado = (*topo).caractere;
  printf("n%c",desempilhado);//linha apenas p/ mostrar a limpeza da memoria
  fflush(stdin);
  aux = (*topo).prox;
  free(topo);
  topo = aux;
 }
 return(desempilhado);
}

int main(void)
{
 char caract, opera='n';
 char desemp;
 struct pilha *p_novo;
 topo = NULL ;
 while(opera != 's')
 {
  printf("nEscolha (e)mpilhar, (d)esempilhar ou (s)air: ");
fflush(stdin);
 opera=getche();
 printf("n");
 fflush(stdin);
 if((opera == 'e')||(opera == 'E'))
 {
  printf("Caractere: ");
  fflush(stdin);
  caract=getche();
  if (p_novo = insere(caract))
  {
         printf("nEmpilhado o caractere %c (end. de memoria: %p)",caract,p_novo) ;
         fflush(stdin);
  }
  else
  {
     printf("nErro - Nao conseguiu alocar memoria!") ;
     fflush(stdin);
  }
 }
 else
     if((opera == 'd')||(opera == 'D'))
        if ((desemp = retira()) != ' ')
        {
           printf("nDesempilhado caractere: %c",desemp) ;
           fflush(stdin);
        }
        else
        {
           printf("nPilha vazia");
           fflush(stdin);
        }
}
while((desemp = retira()) != ' ');
printf("n");
system("PAUSE");
return 0;
}

Pilha em C

  • 1.
    #include <stdio.h> #include <stdlib.h> #include<string.h> struct pilha { char caractere; struct pilha *prox;//neste caso o proximo aponta para o anterior } *no, *topo ; //Chamado de PUSH p/ a Pilha (Stack) struct pilha *insere(char carac) { if((no = (struct pilha*) malloc(sizeof(struct pilha))) != NULL) { (*no).caractere = carac; (*no).prox = topo; topo = no; } return no; } //Chamado de POP p/ a Pilha (Stack) char retira(void) { char desempilhado =' '; struct pilha *aux; if(topo)//se topo aponta p/ NULL retorna falso { desempilhado = (*topo).caractere; printf("n%c",desempilhado);//linha apenas p/ mostrar a limpeza da memoria fflush(stdin); aux = (*topo).prox; free(topo); topo = aux; } return(desempilhado); } int main(void) { char caract, opera='n'; char desemp; struct pilha *p_novo; topo = NULL ; while(opera != 's') { printf("nEscolha (e)mpilhar, (d)esempilhar ou (s)air: ");
  • 2.
    fflush(stdin); opera=getche(); printf("n"); fflush(stdin); if((opera == 'e')||(opera == 'E')) { printf("Caractere: "); fflush(stdin); caract=getche(); if (p_novo = insere(caract)) { printf("nEmpilhado o caractere %c (end. de memoria: %p)",caract,p_novo) ; fflush(stdin); } else { printf("nErro - Nao conseguiu alocar memoria!") ; fflush(stdin); } } else if((opera == 'd')||(opera == 'D')) if ((desemp = retira()) != ' ') { printf("nDesempilhado caractere: %c",desemp) ; fflush(stdin); } else { printf("nPilha vazia"); fflush(stdin); } } while((desemp = retira()) != ' '); printf("n"); system("PAUSE"); return 0; }