#include <stdlib.h>
#include <stdio.h>
/*******************   un type structure    ************/
struct maillon
{
  int valeur;
  struct maillon *suivant;
};

/*************  une variable globale interne au fichier  *******/ 
static struct maillon *debut = NULL;
 
/******************   les corps des fonctions   **************/

/*La fonction suivante retourne 0 si la pile n'est pas vide 
et 1 si elle est vide */
int estVide(void) 
{
  return debut == NULL;
}

/* La fonction suivante empile l'entier indiqué en paramètre */
void empiler(int donnee)
{
  struct maillon *p;

  p = (struct maillon *)malloc(sizeof(struct maillon));
  if (p == NULL)
    {
      printf("probleme d'allocation memoire\n");
      exit(1);
    }
  p->valeur = donnee;
  p->suivant = debut;
  debut = p;
}

/* Si la pile n'est pas vide, la fonction suivante dépile un entier 
et retourne la valeur de cet entier. Si la pile est vide, retourne -1 */
int depiler()
{
  struct maillon *p;
  int val;
  
  if (estVide()) return -1;
  val = debut->valeur;
  p = debut;
  debut = debut->suivant;
  free(p);
  return val;
  
}


