#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

/* On fournit un type de maillon */

struct maillon {
  int elem ;                    /* Un élément */
  struct maillon* suivant ;     /* Le maillon suivant */
} ;

/* On représente une file
 * -> a -> b -> c -> d ->
 * (a est le dernier arrivé, d est le prochain à sortir)
 * au moyen d'un enchaînement de maillons chaînés.
 * Le maillon d a pour suivant le maillon c ;
 * Le maillon c a pour suivant le maillon b ;
 * Le maillon b a pour suivant le maillon a ;
 * Le maillon a a pour suivant le maillon d.

 * Par ailleurs, on manipule la file en fournissant un pointeur sur le
 * maillon a : le dernier arrivé.
 * La file vide est représentée par le pointeur NULL. */
typedef struct maillon* file ;

/* Q1. Définir une fonction file file_vide() retournant une file vide. */
/* Q2. Définir une fonction bool est_vide(file f) permettant de tester si la file passée en paramètre est vide. */
/* Q3. Définir une fonction void enfile(file* pf, int elem) permettant d'enfiler l'élément elem dans la file pointée par pf. */
/* Q4. Définir une fonction int defile(file* pf) permettant de défiler l'élément en tête de la file pointée par pf. */
