Refine .gitignore some more.
[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 {
18 int tete;
19 int queue;
20 element tab[LONG_FILE];
21 } File;
22
23 File file_vide(void)
24 {
25 File f = { 0, 0, {0} }; /* f.tete=f.queue=0 */
26 return f;
27 }
28
29 int est_vide(File f)
30 {
31 return f.tete == f.queue;
32 }
33
34 int est_pleine(File f)
35 {
36 return (f.queue + 1) % LONG_FILE == f.tete;
37 }
38
39 element tete(File f)
40 /* ATTENTION: consulter la tête d'une File vide n'a pas de sens */
41 {
42 if (est_vide(f)) {
43 printf("Erreur - file vide\n");
44 exit(-1);
45 }
46 return f.tab[f.tete];
47 }
48
49 File enfiler(element e, File f)
50 {
51 if (est_pleine(f)) {
52 printf("Erreur - file pleine\n");
53 exit(-1);
54 }
55 f.tab[f.queue] = e;
56 f.queue = (f.queue + 1) % LONG_FILE;
57 return f;
58 }
59
60 File defiler(File f)
61 /* ATTENTION: supprimer la tête d'une File vide n'a pas de sens */
62 {
63 if (est_vide(f)) {
64 printf("Erreur - file vide\n");
65 exit(-1);
66 }
67 f.tete = (f.tete + 1) % LONG_FILE;
68 return f;
69 }
70
71 element defiler2(File * f)
72 /*ATTENTION: la File est modifiée */
73 {
74 element e;
75 /* ATTENTION: défiler une File vide n'a pas de sens */
76 if (est_vide(*f)) {
77 printf("Erreur - file vide\n");
78 exit(-1);
79 }
80 e = f->tab[f->tete];
81 f->tete = (f->tete + 1) % LONG_FILE;
82 return e;
83 }
84
85 /*************************************************************************/
86
87 int main()
88 {
89 File p;
90 int i;
91
92 p = file_vide();
93
94 for (i = 0; i < 20; i++)
95 p = enfiler(i, p);
96
97 for (i = 0; i < 25; i++)
98 printf("%d\n", defiler2(&p));
99 }
100
101 /********************************************************************/