#include <stdio.h>
#include <stdlib.h> // para alocar memória (malloc)
// Aqui definimos a estrutura que será usada
// para gerar a pilha, a qual ira conter apenas
// o valor a ser armazenado e se sucessor.
typedef struct estru
{
int num;
struct estru *prox; // *prox será outra estrutura
// dentro da mesma
} pilha; // nome que usaremos para chamar essa estrutura
pilha *p, *q, *top=NULL; // 2 ponteiros de apoio e o final da pilha
// Função responsavel por adicionar um nova estrtura a pilha
pushToPile(int val)
{
p = malloc(sizeof(pilha)); // ponteiro do tamanho da estrutura
p->num = val; // estrura num recebe um valor
p->prox = q; // p-> recebe seu antecessor
top = p; // topo da pilha recebe o valor mais recente
q = p; // esse nó é salvo para ser usado em uma proxma chamada
}
showList()
{
p = top;
while(p != NULL)
{
printf("%d -> ", p->num); // Mostra valor dentro do nó
p = p->prox; // avança a pilha
}
printf("Desempilhado");
}
int main(void) {
int numero;
while(1)
{
printf("Digite o valor a ser add ou -1 para sair: ");
scanf("%d", &numero);
printf("%d\n", numero);
if(numero == -1) break; // se numero for -1, o loop é qubrado
pushToPile(numero);
}
printf("\n");
showList(); // Mostra pilha gerada;
free(top);
return 0;
}