1 /**************************************************************************
2 Implantation d'un type File d'entiers sous forme chaînée
4 La file est représentée par un doublet tête-queue de pointeurs
6 Le pointeur "tête" contient l'adresse de la tête de la file.
7 Le pointeur "queue" contient l'adresse de la queue de la file.
9 La file vide est représentée par le doublet NULL-NULL
11 Chaque cellule pointe vers la cellule suivante de la file
12 ou vers NULL si on est en queue de file.
14 **************************************************************************/
19 typedef struct cellule
{element valeur
;
20 struct cellule
*suivant
; } Cellule
;
22 typedef struct file
{ Cellule
*t
, *q
; } File
; /* tête queue */
36 /* ATTENTION: consulter la tête d'une File vide n'a pas de sens */
38 if (est_vide(f
)) {printf("Erreur - file vide\n"); exit(-1); }
39 return f
.t
->valeur
; /* la File n'est pas modifiée */
42 File
enfiler(element e
,File f
)
44 Cellule
*pc
=(Cellule
*)malloc(sizeof(Cellule
));
45 pc
->valeur
=e
;pc
->suivant
=NULL
;
48 f
.t
=f
.q
=pc
; /* la cellule créée est à la fois tête et queue */
50 f
.q
=f
.q
->suivant
=pc
; /* la cellule créée est la nouvelle queue */
55 /* ATTENTION: supprimer la tête d'une File vide n'a pas de sens */
60 printf("Erreur - file vide\n");
63 if (f
.t
==f
.q
) f
=file_vide(); /* la File n'avait plus qu'une seule cellule */
64 else f
.t
=f
.t
->suivant
; /* la queue ne change pas */
69 element
defiler2(File
*f
) /* ATTENTION: la File est modifiée */
70 /* ATTENTION: supprimer la tête d'une File vide n'a pas de sens */
76 printf("Erreur - file vide\n");
80 if (f
->t
==f
->q
) *f
=file_vide(); /* la File n'avait plus qu'une seule cellule */
81 else f
->t
=f
->t
->suivant
; /* la queue ne change pas */
87 /********************************************************************/
93 for (i
=0; i
<20; i
++) p
=enfiler(i
,p
);
94 for (i
=0; i
<25; i
++) printf("%d\n",defiler2(&p
));
96 /********************************************************************/