Université Alger 1 – Faculté des Sciences
Département Mathématiques et Informatique
Module : ASD3
Enseignant : Mahseur Mohammed
LES FILES D’ATTENTE
1 Définition
Une File est une structure de données abstraite composée d’un ensemble d’élé-
ments de même type, dans laquelle tout nouveau élément est inséré à la fin et tout
élément ne peut être supprimé que du début. C’est le Principe FIFO.
2 Terminologie
• Début de la File : Tête
• Fin de la File : Queue
• Ajouter un nouveau élément : Enfiler
• Supprimer un élément : Défiler
• La File ne contient aucun élément : File vide
• FIFO : First in first out
3 Machine abstraite
• F est une File
• Val est une variable de même type que les éléments de la File
• Procédure CréerFile(F) : Créer une File vide
• Fonction Booléenne FileVide(F) : Tester si la File est vide
• Fonction Booléenne FilePleine(F) : Tester si la File est pleine
• Procédure Enfiler(F,Val) : Ajouter Val à la fin de la File
• Procédure Défiler(F,Val) : Retirer dans Val l’élément en début de la File
1
4 Implémentation dynamique d’une File
Type Maillon = Enregistrement
Info : TypeInfo ; Suiv : Pointeur sur Maillon ;
Fin ;
Type File = Enregistrement
Tête, Queue : Pointeur sur Maillon ; Fin ;
Variables
F : File ; Val : TypeInfo ;
Procédure CréerFile(S/ : F :File)
F.Tête←NULL ;
Fin Procédure
Fonction FileVide(F :File) :Booléen
Retourner (F.Tête=NULL) ;
Fin Fonction
Procédure EnFiler(ES/ : F :File ; E/ : Val :TypeInfo)
Var Nouv : Pointeur sur Maillon
Allouer(Nouv) ; Valeur(Nouv).Info←Val ;Valeur(Nouv).Suiv←NULL ;
Si (F.Tête=NULL) alors
F.Tête←Nouv ; F.Queue←Nouv ;
Sinon
Valeur(F.Queue).Suiv←Nouv ;F.Queue←Nouv ;
Fin Si
Fin Procédure
Procédure Defiler(ES/ : F :File ; ES/ : Val :TypeInfo)
Var Sauv : Pointeur sur maillon ;
Si (Not FileVide(F)) alors
Sauv←F.Tête ; Val←Valeur(F.tête).Info ;
Si (F.Tête=F.Queue) alors
F.Queue←NULL ;
Fin Si
F.Téte←Valeur(F.Tête).Suiv ; Libérer(Sauv) ;
Sinon
Ecrire("File Vide") ;
Fin Si
Fin Procédure
2
5 Implémentation en Langage C
Exemple :
Créer une File d’entiers puis enfiler six éléments, ensuite les défiler et les afficher.
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
//-----------------------------
typedef int TypeInfo;
//----------------------------------
struct Maillon{TypeInfo Info; struct Maillon * Suiv;};
//-----------------------------------------
struct File{struct Maillon *Tete, *Queue;};
//----------------------------
void CreerFile (struct File *F){(*F).Tete=NULL;}
//--------------------------------
bool FileVide(struct File F){return (F.Tete==NULL);}
//-------------------------
void Enfiler(struct File *F, TypeInfo Val){
struct Maillon *Nouv;
Nouv=malloc(sizeof(struct Maillon));
Nouv->Info=Val; Nouv->Suiv=NULL;
if((*F).Tete==NULL){(*F).Tete=Nouv;(*F).Queue=Nouv;}
else{((*F).Queue)->Suiv=Nouv;(*F).Queue=Nouv;}}
//------------------------------------
void Defiler(struct File *F, TypeInfo *Val){
struct Maillon *Sauv;
if (FileVide(*F)){printf("la file est vide\n");}
else{*Val=((*F).Tete)->Info; Sauv=(*F).Tete;
if((*F).Tete==(*F).Queue){(*F).Queue=NULL;}
(*F).Tete=((*F).Tete)->Suiv;free(Sauv);}}
//-------------------------------
int main()
{int i;TypeInfo v;
struct File F; CreerFile(&F);
for(i=1;i<7;i++){
printf("donner une valeur: "); scanf("%d",&v);Enfiler(&F,v);}
while(!FileVide(F)){Defiler(&F,&v);printf("%d\n",v);}
return 0;}
//--------------------------------------------------