#include "pilha_dinam.h"
#define max 20

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

Pilha cria_pilha()
{
    return NULL;
}

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

int push(Pilha *p, int elem)
{
    Pilha 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)
{
    if (pilha_vazia(*p) == 1) return 0;

    Pilha aux = *p;

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

int le_topo(Pilha *p,int *elem)
{
    if(pilha_vazia(*p) == 1) return 0;
    *elem = (*p)->info;
    return 1;
}

void imprimir(Pilha *p)
{
    if (pilha_vazia(*p) == 1) printf("Pilha vazia");

    Pilha aux = *p;
    int i;

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

int separa_parimpar(Pilha *p)
{
    if(pilha_vazia(*p))
        return 0;
    int i;
    Pilha aux     = *p;
    Pilha impares = cria_pilha();
    Pilha pares   = cria_pilha();

    while(aux != NULL) {
        /* Se for par */
        if(aux->info % 2 == 0)
            push(&pares, aux->info);
        else
            push(&impares, aux->info);
        aux = aux->prox;
    }

    printf("Pares ");
    imprimir(&pares);

    printf("Impares ");
    imprimir(&impares);
    return 1;
}
