Você está na página 1de 2

/*Empilha o elemento e aponta para o próximo da lista, e na hora pra

desempilhar, muda-se o topo da lista


*/
#include <stdio.h>
#include <stdlib.h>
typedef struct no{
int dados;
struct no *proximo;
} No;
No *empilhar (No *topo){
No *novo = malloc (sizeof(No));
int valor;
if (novo){
printf ("Coloque um valor para a pilha: ");
scanf ("%d", &valor0;
novo -> dados = valor;
novo -> proximo = topo;
return novo;
}
else
printf ("Memória não foi alocada");
return NULL;
}
No* desempilha (No **topo){
if (*topo != NULL){
No *remover = *topo;
*topo = remover -> proximo;
return remover;
}
else
printf ("Vazia");
return NULL;
}
void imprimir (No *topo){
if (topo != NULL) {
printf ("\t<<< Pilha >>>\n");
do {
printf ("-> %d ", topo -> dados);
topo = topo -> proximo;
} while (topo);
printf ("\n\t<<< Fim >>>\n")
}
else
printf ("Vazia");
}
int main() {
No *remover, **topo = NULL;
int o;
do {
printf ("\n0 - Sair\n1 - Empilhar\n2 - Desempilhar\n3 -
Imprimir\n");
scanf ("%d", &o);
getchar();
switch (o) {
case 1:
topo = empilhar (topo);
break;
case 2:
remover = desempilhar (&topo);
if (remover){
printf ("\n0 elemento %d foi removido",
remover -> dados);
free (remover);
}
else
printf ("Nada a remover\n");
break;
case 3:
imprimir (topo);
break;
default:
if (o != 0)
printf ("Inválida\n");
break;
}
} while (o != 0);
return 0;
}

Você também pode gostar