Commit | Line | Data |
---|---|---|
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 | ||
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 |