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