--- /dev/null
+/**************************************************************************
+ Implantation contiguë d'un type File d'entiers
+
+ La File est représentée par une structure:
+ un tableau représente les valeurs
+ un entier représente la position de la tête de la File
+ un entier représente la position de la queue de la File
+
+ le tableau est exploité de façon circulaire.
+**************************************************************************/
+#include <stdio.h>
+#include <stdlib.h>
+
+#define LONG_FILE 25
+
+typedef int element;
+typedef struct { int tete;
+ int queue;
+ element tab[LONG_FILE]; } File;
+
+File file_vide(void)
+{ File f={0,0}; /* f.tete=f.queue=0 */
+ return f;
+}
+
+int est_vide(File f) { return f.tete==f.queue; }
+
+int est_pleine(File f) { return (f.queue+1)%LONG_FILE==f.tete; }
+
+element tete(File f)
+/* ATTENTION: consulter la tête d'une File vide n'a pas de sens */
+{ if (est_vide(f)) { printf("Erreur - file vide\n"); exit(-1); }
+return f.tab[f.tete];
+}
+File enfiler(element e,File f)
+{ if (est_pleine(f)) { printf("Erreur - file pleine\n"); exit(-1); }
+ f.tab[f.queue]=e; f.queue=(f.queue+1)%LONG_FILE;
+ return f;
+}
+
+File defiler(File f)
+/* ATTENTION: supprimer la tête d'une File vide n'a pas de sens */
+{ if (est_vide(f)) { printf("Erreur - file vide\n"); exit(-1); }
+ f.tete=(f.tete+1)%LONG_FILE;
+ return f;
+}
+
+element defiler2(File * f) /*ATTENTION: la File est modifiée */
+/* ATTENTION: défiler une File vide n'a pas de sens */
+{ element e;
+ if (est_vide(*f)) { printf("Erreur - file vide\n"); exit(-1); }
+e=f->tab[f->tete];
+ f->tete=(f->tete+1)%LONG_FILE;
+ return e;
+}
+/*************************************************************************/
+
+
+int main()
+{File p;
+ int i;
+
+ p=file_vide();
+
+ for (i=0; i<20; i++) p=enfiler(i,p);
+
+ for (i=0; i<25; i++) printf("%d\n",defiler2(&p));
+}
+/********************************************************************/
+