Pilha em C

2

Click here to load reader

description

Exemplo de Pilha com alocação dinâmica de memória em linguagem C.

Transcript of Pilha em C

Page 1: Pilha em C

#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: ");

Page 2: Pilha em C

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