Pilha em C
Click here to load reader
-
Upload
luiz-francisco-bozo -
Category
Education
-
view
3.734 -
download
0
description
Transcript of 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: ");
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;}