#include <stdio.h>
#include <stdlib.h>
#include "pile.h"


void test1()
{
lifo pile;
int x;
int i;

init(&pile); // initialisation de la pile (=0)

print_lifo(&pile); // affichage de la pile vide

for (i = 0; i < 5; i++) // remplissage de la pile
{
push(i, &pile);
}
printf("\n");
print_lifo(&pile); // affichage de la pile remplie

for (i = 0; i < 5; i++) // Vidage de la pile
{
pop(&pile);
}
printf("\n");

pop(&pile);
printf("\n\n");
print_lifo(&pile); // affichage de la pile vidée
printf("\n");

}

int isEmpty (lifo *pile) // renvoie 0 lorsque la pile est vide, sinon renvoie 1.
{
    if(pile->sommet != NULL)
    {
        return 1;
    }
    else return 0;
}

void init(lifo* pile) // initialise la pile
{
    pile->sommet=NULL;
    pile->hauteur=0;
}

void print_lifo(lifo * pile) // affiche le contenu de la pile
{
    cell* temp;
    temp=(cell*)malloc(sizeof(cell));
    temp=pile->sommet;
    int i=0;

    if (isEmpty(pile)==0) printf("Pile vide.\n"); // Si la pile est vide
    else
    {
        printf("Pile complete : \n");
        for (i=0; i<pile->hauteur;i++)
        {
            printf("Valeur : %d\n", temp->val);
            temp=temp->next;
        }
    }
}

int push(int i, lifo *pile) // retourne 0 si erreur, 1 sinon.
{
    cell* temp;
    temp=(cell*)malloc(sizeof(cell));
    temp->val=i;
    temp->next=NULL;

    if (isEmpty(pile)==0) // cas de la liste vide
    {

        pile->sommet=temp;
        pile->hauteur++;
        return 1;
    }
    else
    {
        temp->next=pile->sommet;
        pile->sommet=temp;
        pile->hauteur++;
        return 1;
    }
    return 0;
}

int pop(lifo* pile) // retourne 0 si erreur, sinon 1.
{
    if(isEmpty(pile)==0) // cas de la pile vide
    {
        printf("La pile est vide, depilement impossible.");
        return 1;
    }
    else
    {
    cell* temp;
    temp=pile->sommet;
    pile->sommet=temp->next;
    free(temp);
    pile->hauteur--;
    return 1;
    }

    return 0;
}

