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