Académique Documents
Professionnel Documents
Culture Documents
1
Les files
Une file est une liste dans laquelle toutes les insertions se font en queue et toutes les
suppressions se font en tête : une file a une structure FIFO.
L’accès à un élément quelconque se fait après le retrait (défilement) de tous les
éléments qui le précède.
2
Représentation des files en mémoire
On peut représenter ou implémenter les files en mémoire de façon :
Contiguë
tete Queue
50 -5 12 111
Chaînée
Queue
tete
800
300
50 -5 12 111
3
1- Représentation chaînée
Déclaration
Type File= enregistrement Type File : ^Cellule ;
info :<type_elt> ; Type Cellule : Enregistrement
svt : ^File ; info: <type_elt> ;
Fing ; svt : File ;
variable Fing ;
L : ^File ; variable
L : File ;
4
Représentation chaînée
Tester si la file est vide
Fonction file_vide(E/ tete: file) : booléen
Début
Si (tetet = nil) alors retourne vrai ;
sinon retourne faux ;
Fsi ;
Fin ;
Queue
tete
800
300
50 -5 12 111
tete Queue
nil nil
5
Représentation chaînée
Consulter l’élément se trouvant en tête de file
Queue
tete
800
300
50 -5 12 111
Queue
Fich2 tete
800
300
Fich2 Fich1 Fich3
Allouer(nouv) ;
si (nouv ≠nil) alors nouv ^.info ← e ;
nouv ^.svt ← nil ;
Fich1
nil 7
Enfiler : Ajout d’un élément
Procédure Enfiler(ES/ tete, Queue : File, E/ e :<Type_elt>)
Début
nouv : File
Allouer(nouv) ;
si (nouv ≠nil) alors nouv ^.info ← e ;
nouv ^.svt ← nil ;
nil
200 nil
900 nil
8
Défiler : suppression d’un élément
Procédure défiler(ES/ tete, Queue : File, S/ e :<Type_elt>)
Début
temp : File ; (* le test si la file est vide se fait dans le prog principal *)
e ← premier_element(tete) ; (* e ← tete^.info *)
temp ← tete ;
tete ← tete^.svt ;
Libérer(temp) ;
Si(tete=nil) alors Queue ← nil ; Fsi;
Fin ;
e Fich1
tete temp tete Queue
700 700 300 900
e ← premier_element(tete) ; (* e ← tete^.info *)
tmp ← tete ;
tete ← tete^.svt ;
Libérer(tmp) ;
Si(tete=nil) alors Queue ← nil ; Fsi;
Fin ;
e
tete tmp tete Queue
Fich2
300 300 900 900
Fich2 Fich3
900 nil
10
Défiler : suppression d’un élément
Procédure défiler(ES/ tete, Queue : File, S/ e :<Type_elt>)
Début
tmp : File ; (* le test si la file est vide se fait dans le prog principal *)
e ← premier_element(tete) ; (* e ← tete^.info *)
tmp ← tete ;
tete ← tete^.svt ;
Libérer(tmp) ;
Si(tete=nil) alors Queue ← nil ; Fsi;
Fin ;
e
Fich3
tete Queue tmp tete
Fich3
nil
11
2- Représentation contigüe
Déclaration
On peut représenter une file par un tableau alloué d’une manière
statique. On peut choisir le triplet suivant : (T, Tete, nb_elt) pour
manipuler cette file.
Constante max _tab 100 ;
Type File = Enregistrement
T : tableau [max_tab] <Type_Elt> ;
Tete : entier ;
nb_elt : entier ;
Fing ;
f : File ;
tete max_tab
nb_elt
1 10
4
50 -5 12 111
12
2- Représentation contigüe
Initialisation
Fonction InitFile ( ) : File
Constante max _tab 100 ;
Var Type File = Enregistrement
f : File ; T : tableau [max_tab] <Type_Elt> ;
Début Tete : entier ;
nb_elt : entier ;
f.Tete ← 1; Fing ;
f.nb_elt ← 0;
Retourner (f); f : File ;
Fin
13
2- Représentation contigüe
Consulter l’élément se trouvant en tête de file
50 -5 12 111
50 -5 12 111
15
2- Représentation contigüe
Tester si la file est pleine
f.nb_elt f.Tete
10 1
16
Défiler : suppression d’un élément
Procédure défiler(ES/ f : File, S/ e :<Type_elt>)
Début
e ← f.t[f.tete];
Si(f.Tete = max_tab alors f.Tete ← 1;
sinon f.Tete ← f.Tete +1;
Fsi;
f.nb_elt ← f.nb_elt - 1;
e
Fin ; 50
max_tab
5
f.nb_elt f.Tete
45 21
50 -5 12 111 99
17
Défiler : suppression d’un élément
Procédure défiler(ES/ f : File, S/ e :<Type_elt>)
Début
indice : entier ;
indice ← f.Tete; (* sauvegarder le rang du 1 elt *)
er
50 -5 12 111 99
18
Défiler : suppression d’un élément
Procédure défiler(ES/ f : File, S/ e :<Type_elt>)
Début
indice : entier ;
indice ← f.Tete; (* sauvegarder le rang du 1 elt *)
er
50 -5 12 111 99
19
Défiler : suppression d’un élément
Procédure défiler(ES/ f : File, S/ e :<Type_elt>)
Début
indice : entier ;
indice ← f.Tete; (* sauvegarder le rang du 1 elt *)
er
50 -5 12 111 99
20
Défiler : suppression d’un élément
Procédure défiler(ES/ f : File, S/ e :<Type_elt>)
Début
indice : entier ;
indice ← f.Tete; (* sauvegarder le rang du 1 elt *)
er
50 -5 12 111 99
21
Enfiler : Ajout d’un élément
Procédure Enfiler (ES/ f: File, E/ e : <TypeElt>)
Début (* Tester si la file est pleine dans le PP avant l’appel de cette action *)
indice : entier ;
Si(f.tete + f.nb_elt) > max_tab
alors+ f.nb_elt
indice ← ((f.Tete indice ←– f.tete1) mod + f.nb_elt
max_tab)- max_tab;
+ 1;
sinon indice ← f.tete + f.nb_elt;
Fsi;
f.T[indice] ← e;
f.nb_elt ← f.nb_elt + 1;
Fin e indice max_tab
25 8 10
f.nb_elt f.Tete
87 1
50 -5 12 111 0 56 -40 25
22
Enfiler : Ajout d’un élément
Procédure Enfiler (ES/ f: File, E/ e : <TypeElt>)
Début
indice : entier ;
e indice max_tab
-33 9 10
f.nb_elt f.Tete
98 1
23
Enfiler : Ajout d’un élément
Procédure Enfiler (ES/ f: File, E/ e : <TypeElt>)
Début
indice : entier ;
e indice max_tab
201 10 10
f.nb_elt f.Tete
9
10 1
24
Défiler : Suppression d’un élément
Procédure défiler(ES/ f : File, S/ e :<Type_elt>)
Début
indice : entier ;
indice ← f.Tete; (* sauvegarder le rang du 1 elt *)
er
25
Enfiler : Ajout d’un élément
Procédure Enfiler (ES/ f: File, E/ e : <TypeElt>)
Début
indice : entier ;
e indice max_tab
66 1 10
f.nb_elt f.Tete
9
10 2
50
66 -5 12 111 0 56 -40 25 -33 201
26
Défiler : Suppression d’un élément
Procédure défiler(ES/ f : File, S/ e :<Type_elt>)
Début
indice : entier ;
indice ← f.Tete; (* sauvegarder le rang du 1 elt *)
er
50
66 -5 12 111 0 56 -40 25 -33 201
27
Enfiler : Ajout d’un élément
Procédure Enfiler (ES/ f: File, E/ e : <TypeElt>)
Début
indice : entier ;
e indice max_tab
99 2 10
f.nb_elt f.Tete
9
10 3
50
66 -5
99 12 111 0 56 -40 25 -33 201
28
FIN
29