Add TP5 skeleton
[Algorithmic_C.git] / TP5 / exo3 / file_contigue.c
diff --git a/TP5/exo3/file_contigue.c b/TP5/exo3/file_contigue.c
new file mode 100644 (file)
index 0000000..7908535
--- /dev/null
@@ -0,0 +1,70 @@
+/**************************************************************************
+ 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));
+}
+/********************************************************************/
+