Add TP5 skeleton
[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;
17typedef struct { int tete;
18 int queue;
19 element tab[LONG_FILE]; } File;
20
21File file_vide(void)
22{ File f={0,0}; /* f.tete=f.queue=0 */
23 return f;
24}
25
26int est_vide(File f) { return f.tete==f.queue; }
27
28int est_pleine(File f) { return (f.queue+1)%LONG_FILE==f.tete; }
29
30element 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); }
33return f.tab[f.tete];
34}
35File 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
41File 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
48element 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); }
52e=f->tab[f->tete];
53 f->tete=(f->tete+1)%LONG_FILE;
54 return e;
55}
56/*************************************************************************/
57
58
59int 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