Buscar

Exemplo de implementação do tipo abstrato de dados Pilha

Prévia do material em texto

Exemplo de implementação do tipo abstrato de dados PILHA:
#include <stdio.h>
#define TRUE 1
#define FALSE 0
typedef struct no {
	int info;
	struct no * prox;
} TNo;
typedef TNo * Stack;
int isEmpty (Stack p) { // teste se a pilha está vazia
	if (p == NULL)
		return TRUE;
	else
		return FALSE;
}
void push (Stack * p, int n) { // empilhar um valor, ou seja, insere no topo da pilha
	TNo * novo;
	novo = (TNo *) malloc (sizeof (TNo));
	novo->info = n;
	if (isEmpty (*p) == TRUE) 
		novo->prox = NULL;
	else
		novo->prox = *p;
	*p = novo;
}
int pop (Stack * p) { // desempilha, ou seja, retira o valor situado no topo da pilha
	int n;
	TNo * aux;
	aux = *p;
	*p = (*p)->prox;
	n = aux->info;
	free (aux);
	return n;
}
int top (Stack p) {
	return p->info;
}
void initialize (Stack *p) {
	*p = NULL;
}
�
int main () {
	Stack minhaPilha;
	int valor;
	char op;
	initialize (&minhaPilha);
	do {
		printf ("1 - Empilhar \n2 - Desempilhar \n3 - Ver topo \n4 - Sair \nDigite a opcao: ");
		op = getchar (); fflush (stdin);
		switch (op) {
		case '1': printf ("Informe o valor: ");
			 scanf ("%i",&valor); fflush (stdin);
				 push (&minhaPilha, valor);
				 break;
		case '2': if (isEmpty (minhaPilha) == TRUE)
					 printf ("Pilha vazia \n");
				 else {
					 valor = pop (&minhaPilha);
					 printf ("Valor desempilhado: %i\n", valor);
				 }
				 break;
 case '3': if (isEmpty (minhaPilha) == TRUE)
					 printf ("Pilha vazia \n");
				 else 
					 printf ("Valor no topo da pilha: %i\n", top(minhaPilha));
				 break;
		case '4': while (isEmpty (minhaPilha) == FALSE)
					 pop (&minhaPilha);
			 break;
		default: printf ("Opcao invalida \n");
		}
	} while (op != '4');
	return 0;
}

Continue navegando