#include "pilha_estatica.h"

struct pilha {
    char no[MAX];
    int topo;
};

Pilha cria_pilha()
{
    Pilha p;
    p = (Pilha) malloc(sizeof(struct pilha));

    if(p != NULL)
        p->topo = -1;
    return p;
}

int pilha_vazia(Pilha p)
{
    if(p->topo == -1)
        return 1;
    else
        return 0;
}

int pilha_cheia(Pilha p)
{
    if(p->topo == MAX-1)
        return 1;
    else
        return 0;
}

int push(Pilha p, char elem)
{
    if(p == NULL || pilha_cheia(p))
        return 0;

    /* Insere o elemento */
    p->topo++;
    p->no[p->topo] = elem;
    return 1;
}

int pop(Pilha p, char *elem)
{
    if(p == NULL || pilha_vazia(p))
        return 0;

    *elem = p->no[p->topo]; // Retorna o elemento
    p->topo--; //Remove o elemento do topo

    return 1;
}

int le_topo(Pilha p, char *elem)
{
    if(p == NULL || pilha_vazia(p))
        return 0;

    *elem = p->no[p->topo];
    return 1;
}

int imprime_lista(Pilha p)
{
    int i;
    printf("Lista:\n\t{ ");
    for(i = p->topo;i != -1;i--)
        printf("%c ", p->no[i]);
    printf("}\n");

    return 1;
}

int imprime_reverso(Pilha p)
{
    int i;

    printf("Lista em ordem inversa:\n\t{ ");
    for(i = 0;i <= p->topo;i++)
        printf("%d ", p->no[i]);
    printf("}\n");

    return 1;
}

int palindromo(char *string)
{
    int i, eh_pal = 0, pos = 0;
    char ch;
    Pilha p = cria_pilha();

    for(i = 0,pos = 0;i < strlen(string);i++, pos++) {
        if(string[pos] == ' ')
            pos++;
        string[i] = string[pos];
    }

    for(i = 0;i < strlen(string);i++) {
        push(p, string[i]);
    }

    for(i = 0;i < strlen(string);i++) {
        pop(p, &ch);
        if(ch == string[i])
            eh_pal++;
    }

    if(eh_pal == strlen(string))
        return 1;

    return 0;
}

