/* Implémentation d'une file dynamique. */ #include #include struct maillon { int val; struct maillon *adr; }; typedef struct { struct maillon *tete, *queue; } File; void CreerFile(File *pf) { pf->tete = NULL; pf->queue = NULL; } int FileVide(File f) { return (f.tete == 0); } int FilePleine(File f) { return 0; // jamais pleine } int Enfiler(int x, File *pf) { struct maillon *p; if (FilePleine(*pf)) return 1; p = malloc(sizeof(*p)); if (p == 0) return 1; p->val = x; p->adr = 0; if (pf->queue) pf->queue->adr = p; else pf->tete = p; pf->queue = p; return 0; } int Defiler(int *x, File *pf) { struct maillon *p; if (FileVide(*pf)) return 1; *x = pf->tete->val; p = pf->tete; pf->tete = pf->tete->adr; free(p); p = 0; if (pf->tete == 0) pf->queue = 0; return 0; } int main() { int x = 0; File f; CreerFile(&f); if (FileVide(f) == 1) printf("La file est vide.\n"); else printf("La file n'est pas vide.\n"); Enfiler(4, &f); if (FileVide(f) == 1) printf("La file est vide.\n"); else printf("La file n'est pas vide.\n"); Defiler(&x, &f); printf("x vaut %d\n", x); if (FileVide(f) == 1) printf("La file est vide.\n"); else printf("La file n'est pas vide.\n"); return 0; }