Algorithmes et Structures de Données Chapitre 5 , Les Files

Transcription

Algorithmes et Structures de Données Chapitre 5 , Les Files
Objectif
Structure de données : Files
Primitives de manipulation des Files
Algorithmes et
Structures de Données
Chapitre 5 – Les Files
Deux implémentations
Contiguë par tableau
Chaînée par pointeur
Capocchi Laurent
[email protected]
http://spe.univ-corse.fr/capocchiweb
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Introduction
Une file d'attente est une structure qui stocke de manière
ordonnée des éléments
Elle rend accessible uniquement la tête de la file
Le premier élément ajouté dans la file est le premier
élément à en être retiré
Cette structure est également appelée une liste FIFO (First
In, First Out)
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Notion de file (FIFO)
Propriétés du type abstrait File
Mémorise les données qui lui sont fournies
Un seul élément est accessible à la foi (le plus ancien)
appelé tête
L'ajout et la suppression d'un élément se font
respectivement par la queue et la tête
Deux façons de représenter une file d'attente.
La première s'appuie sur la structure de liste chaînée
La seconde manière utilise un tableau d'une façon assez
particulière que l'on appelle modélisation par "tableau
circulaire"
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
queue
1
tête
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Opérations générales sur les files
Modélisation par tableau circulaire
Le type File est utilisé au sens générale sans se soucier de
sa modélisation
L'ajout d'un élément se fait à la suite du dernier élément du
tableau
Opérations
créerFile :
-> File
initialise (crée) la file
enfiler :
Élément X File -> File
ajoute un élément en queue de file si la elle n’est pas pleine
défiler :
File -> File
supprime l'élément en tête de file si elle n'est pas vide
lireFile :
File -> Élément
lit le premier élément en tête de file si elle n'est pas vide
fileVide :
File -> Booléen
renvoie VRAI si la file ne contient aucun élément
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Modélisation par tableau circulaire
Le retrait d'un élément se fait en enlevant le premier
élément du tableau
Il faut donc deux indices pour ce tableau:
le premier qui indique le premier élément de la file
le deuxième qui indique le dernier élément de la file
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Modélisation par tableau circulaire
Exemple
La structure est la suivante
Type Élément = . . . //dépend du problème
Type Tab = tableau [1 à MAX] de Élément
Type File = Structure
tête : Entier
queue : Entier
corps : Tab
finStructure File
créerFile
enfiler(5,f)
enfiler(9,f)
tête
0
queue
0
tête
1
queue
2
tête
1
queue
3
enfiler(12,f) tête
défiler(f)
4
tête
2
queue
4
enfiler(20,f) tête
queue
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
1
queue
2
5
1
2
3
?
?
?
4
?
5
?
6
?
7
?
8
?
9
?
10
?
5
?
?
?
?
?
?
?
?
?
5
9
?
?
?
?
?
?
?
?
5
9
12
?
?
?
?
?
?
?
5
9
12
?
?
?
?
?
?
?
5
9
12
20
?
?
?
?
?
?
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Modélisation par tableau circulaire
Modélisation par tableau circulaire
Au cours des opérations d'ajout et de retrait, le tableau se
déplace sur la droite dans son espace mémoire
Piège: Lorsque tête=queue cela correspond au cas ou la file
est vide et au cas ou la file contient MAX éléments
Conduit à un débordement du tableau sans que la file soit
pleine
On impose donc que la file ait une capacité de MAX-1
éléments
MAX
Solution: la première et la dernière case sont adjacentes
1
Lorsque la queue atteint la fin du tableau, effectuer les
empilements suivants à partir du début du tableau
2
On traite les indices de tête et de queue modulo MAX
On « circularise » l'espace mémoire
3
queue
...
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Modélisation par tableau circulaire
La file a alors une taille limitée
Utilisation de deux marqueurs pour répéter la tête de la
queue de file
...
tête
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Modélisation par tableau circulaire
Pour avoir un tableau on fait une incrémentation
modulo la taille du tableau
On enfile en queue de file et le marqueur de fin avance
d'une case (modulo la taille) s'il reste de la place
On dépile en tête de file et le marqueur de début avance
d'une case (modulo la taille)
Attention tête n'est pas nécessairement devant queue
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Files en représentation contigue
procédure créerFile (var f : File)
f->tête <- 0
f->queue <- 0
finProcédure créerFile
Fonction fileVide (f :File) : Booléen
Retourner (f.tête = f.queue)
finFonction fileVide
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Files en représentation contigue
fonction lireFile (f: File) : Élément
si fileVide (f) alors
Erreur
sinon
retourner f.corps[f.tête]
finSi
finFonction lireFile
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Files en représentation contigue
Files en représentation contigue
procédure enfiler (entrée e : Élément, var f: File)
si NON filePleine(f) alors
f->corps[f->queue] <- e
f->queue <- (f->queue +1) mod MAX
finSi
finProcédure enfiler
Fonction filePleine (f : File) : Booléen
retourner f.tête = (f.queue +1) mod MAX
finFonction filePleine
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Procédure Défiler (var f : File)
si fileVide (f) alors
Erreur
sinon
f->tête <- (f->tête + 1) mod MAX
finSi
finProcédure Défiler
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Modélisation par liste chaînée
Modélisation par liste chaînée
créerFile(f)
Utilisation des deux opérations
ajouterQueue
retirerTete
Le premier élément entré est le premier élément sorti
Une file d'attente peut être représentée comme
tête
queue
enfiler(5,f)
tête
queue
enfiler(9,f)
tête
queue
enfiler(12,f) tête
queue
?
?
?
?
?
?
?
?
?
?
5
?
?
?
?
?
?
?
?
?
5
9
?
?
?
?
?
?
?
?
5
9
12
?
?
?
?
?
?
?
La structure d'une file d'attente est celle d'une liste chaînée
Type File = Structure
numElem : Entier
tête : PtrMaillon
queue : PtrMaillon
finStructure File
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Files en représentation chaînée
procédure créerFile (var f : File)
f->numElem <- 0
f->tete <- nil
f->queue <- nil
finProcédure créerFile
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Files en représentation chaînée
fonction lireFile (f : File) : Élément
si fileVide (f) alors
retourner Erreur
sinon
retourner f.tête.valeur
finfonction lireFile
fonction fileVide (f : File) : Booléen
retourner (f.tête = nil)
finFonction FileVide
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Files en représentation chaînée
fonction enfiler (var f : File, entrée e: Element)
ajouterQueue(f,e)
finfonction lireFile
Procédure défiler (var f: File)
Var locale ancien : Maillon
si NON fileVide (f) alors
ancien <- f->tête
f->tête <- f->tête.suivant
libérer (ancien)
si f->tête = nil alors
f->queue <- nil
finSi
finSi
FinProcédure défiler
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Bibliographie et Webographie
B. Bachelet, Structures de données
C. PAOLI, Cours d'algorithmes et structures de données
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Conclusion
Ce genre de structure de données est très utilisée par les
mécanismes d'attente
C'est le cas notamment d'une imprimante en réseau, où les
tâches d'impressions arrivent aléatoirement de n'importe
quel ordinateur connecté. Les tâches sont placées dans une
file d'attente, ce qui permet de les traiter selon leur ordre
d'arrivée
Les remarques concernant les différences entre la
modélisation par liste chaînée et la modélisation par tableau
circulaire sont les mêmes que pour la structure de file
Très peu de différences sont constatées. En résumé, la
modélisation par liste chaînée sera un peu plus lente, mais
plus souple quant à sa taille
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données