79085351501ee4b0d86fcdb2c8309aa7bed1177a
[Algorithmic_C.git] / TP5 / exo3 / file_contigue.c
1 /**************************************************************************
2 Implantation contiguë d'un type File d'entiers
3
4 La File est représentée par une structure:
5 un tableau représente les valeurs
6 un entier représente la position de la tête de la File
7 un entier représente la position de la queue de la File
8
9 le tableau est exploité de façon circulaire.
10 **************************************************************************/
11 #include <stdio.h>
12 #include <stdlib.h>
13
14 #define LONG_FILE 25
15
16 typedef int element;
17 typedef struct { int tete;
18 int queue;
19 element tab[LONG_FILE]; } File;
20
21 File file_vide(void)
22 { File f={0,0}; /* f.tete=f.queue=0 */
23 return f;
24 }
25
26 int est_vide(File f) { return f.tete==f.queue; }
27
28 int est_pleine(File f) { return (f.queue+1)%LONG_FILE==f.tete; }
29
30 element tete(File f)
31 /* ATTENTION: consulter la tête d'une File vide n'a pas de sens */
32 { if (est_vide(f)) { printf("Erreur - file vide\n"); exit(-1); }
33 return f.tab[f.tete];
34 }
35 File enfiler(element e,File f)
36 { if (est_pleine(f)) { printf("Erreur - file pleine\n"); exit(-1); }
37 f.tab[f.queue]=e; f.queue=(f.queue+1)%LONG_FILE;
38 return f;
39 }
40
41 File defiler(File f)
42 /* ATTENTION: supprimer la tête d'une File vide n'a pas de sens */
43 { if (est_vide(f)) { printf("Erreur - file vide\n"); exit(-1); }
44 f.tete=(f.tete+1)%LONG_FILE;
45 return f;
46 }
47
48 element defiler2(File * f) /*ATTENTION: la File est modifiée */
49 /* ATTENTION: défiler une File vide n'a pas de sens */
50 { element e;
51 if (est_vide(*f)) { printf("Erreur - file vide\n"); exit(-1); }
52 e=f->tab[f->tete];
53 f->tete=(f->tete+1)%LONG_FILE;
54 return e;
55 }
56 /*************************************************************************/
57
58
59 int main()
60 {File p;
61 int i;
62
63 p=file_vide();
64
65 for (i=0; i<20; i++) p=enfiler(i,p);
66
67 for (i=0; i<25; i++) printf("%d\n",defiler2(&p));
68 }
69 /********************************************************************/
70