Les files
1. Définition
2.Primitives de manipulation.
3. Représentation d'une file par un tableau.
4. Représentation d'une file par une liste.
**************************************
1. Définition :
Une file est une structure de données pour laquelle l’insertion d’un élément se fait en fin de liste, et la suppression se fait en début de liste (first in-first out, FIFO). Par exemple, une file d’attente.
Seule l'information de la tête(de début) est accessible et traitable.
2- Primitives de manipulation :
1.Enfiler revient à ajouter un élément en fin de liste.
2.Défiler: revient à effectuer une suppression en tête.
3.head revient à renvoyer l’information stockée dans l’élément de tête.
4.EstVide revient à tester si la liste est vide.
3 .Représentation d'une file par un tableau :
Comme dans le cas des piles, il est possible d’implémenter une file par un vecteur.
D-F
Etat initial ( 1)
D F
1 2 3
3 Enfiler (2)
D F
3 s
2 défiler (3)
D F
3 4s 5
2 Enfiler (4)
D 3 4 5
F D File circulaire (5)
On devra repérer dans le vecteur , deux positions deb et f in.
- Lorsque Fin atteindra la dernière case du vecteur, il ne sera plus possible de faire de nouveaux Enqueue. ( schéma 4 )
- Ainsi, chaque Dequeue diminue la taille potentielle de la file. ( schéma 3 )
- On peut palier ce problème en considérant que le vecteur est circulaire, ( schéma 5 )
Cela signifie qu’on considère qu’il existe une case « à droite » de la case d’indice n, qui est la case d’indice 1.
-Ainsi, quand on incrémente fin ou deb, et que la valeur d’un des deux dépasse n, il convient de la remettre à 1. Ceci peut aisément s’obtenir à l’aide de l’opérateur modulo.
- l’opération d’incrémentation « circulaire » d’un indice i est i := (i mod n)+1.
-Dans le cas où les cases sont numérotées de 0 à n−1, l’opération devient i := (i+1)mod n.
-Par contre, il n’est pas possible de stocker n valeurs dans le vecteur.( pourquoi ?) On a
Const Tmax= 100 ; Type indice= 1..Tmax ; File= record
D , Fin: indice;
Cont: array[1..Tmax] of integer;
End;
Var F: File
3.1/ initialisation
Procedure initialiser ( var f : file);
Begin F.d:=1;
F.Fin:=1;
End;
3.2/ vérification
Functionfilevide( f:file): Boolean;
Begin
Filevide=(f.d=F.fin);
End;
Function file pleine( f:file):Boolean;
Begin
Filepleine=(F.D=(F.Fin mod n) +1) End;
3.3/Enfiler
Procédureenfiler( var f: file ; x:integer);
Begin
If not( filepleine )then begin
F.cont[f.fin]:= x;
f.fin:=(f.fin mod n) +1;
end; end; 3.4/Défiler
Procedure defiler( var f: file);
Begin
If not ( filevide(f) ) then F.D:=( F.d mod n) +1
Else write (‘ la file est vide’) ;
End;
4. Représentation d’une file par une liste:
1)Type cellule= ^ noeud Nœud= record
V : integer ; Suivant :cellule ; End ;
File= record
H, Q :cellule ; end ; Var f :file ;
1/Procedure initialiser( Var f: file);
Begin F.h:=nil;
End;
2/ function filevide(f:file):Boolean;
begin
filevide:= ( f.h=nil);
End;
4/Procedure defiler ( var f :file) ; Var
P: cellule;
Begin
If not (filevide( f) ) then begin
P:= f.h;
f.h:=f.h^.suivant;
dispose( p) ; end
else write (‘ la pile est vide’);
End;