#include "pilha_dinamica.h"

struct pilha {
    int info;
    struct pilha *prox;
};

Pilha cria_pilha()
{
    return NULL;
}

int pilha_vazia(Pilha p)
{
    if(p == NULL)
        return 1;
    else
        return 0;
}

int push(Pilha *p, int elem)
{
    Pilha N;
    N = (Pilha) malloc(sizeof(struct pilha));
    if(N == NULL)
        return 0;

    N->info = elem;
    N->prox = *p;
    *p = N;
    return 1;
}

int pop(Pilha *p, int *elem)
{
    if(pilha_vazia(*p))
        return 0;

    Pilha aux = *p;
    *elem = aux->info;
    *p = aux->prox;
    free(aux);
    return 1;
}

int le_topo(Pilha *p, int *elem)
{
    if(pilha_vazia(*p))
        return 0;

    *elem = (*p)->info;
    return 1;
}

int imprime_pilha(Pilha *p)
{
    if(pilha_vazia(*p))
    {
        printf("Pilha: \n\t{ }\n");
        return 1;
    }

    Pilha aux = *p;
    if(p == NULL)
        return 0;

    printf("Pilha:\n\t{ ");
    while(aux != NULL)
    {
        printf("%d ", aux->info);
        aux = aux->prox;
    }
    printf("}\n");
    return 1;
}
