Algorithmes et Structures de Données Chapitre 4 , Les Piles
Transcription
Algorithmes et Structures de Données Chapitre 4 , Les Piles
Objectif Structure de données : Piles Primitives de manipulation des Piles Algorithmes et Structures de Données Chapitre 4 – Les Piles 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 Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Rappels Rappels Structure dynamique = structure dont la taille (Nbre de composants) peut varier en cours d’exécution Structure récursive = définition comportant une référence à elle même Deux sortes de structures : Les structure non-récursives : les fichiers Les structures récursives: liste, pile, file Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Une seule référence : structure linéaire Plusieurs références : structure non-linéaire Les références se font à l’aide de pointeurs Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Structures auxiliaires : Piles, Files Structures qui s’utilisent souvent en conjonction avec d’autres = structures intermédiaires Structures d’une grande importance dans de nombreux domaines Systèmes d’exploitation: pile d’exécution, file d’impression, etc. Structures auxiliaires : Piles, Files Structures caractérisé par un comportement particulier : insertion, extraction Pile : insertion et extraction des éléments à la même extrémité de la suite linéaire File : insertion à un bout et extraction à l’autre Évaluation d'expressions: arithmétiques, logiques, etc. Bases de données: interrogation, mise à jour, etc. Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Les Piles Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Les Piles Stack en anglais… FILO : First In Last Out « premier arrivé dernier servi » LIFO : Last In First Out « dernier arrivé premier servi » Type abstrait associant structure de données et algorithmes Étude des structures de données classiques et des algorithmes associés Notion de type abstrait Définition du type abstrait Pile Deux implémentations Représentation contiguë Représentation chaînée 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 Les Piles Les Piles Propriétés d’un type abstrait « pile » : créerPile : -> Pile initialise (crée) la pile Mémorise les données qui lui sont fournies Un seul élément est accessible à la fois (le dernier inséré) appelé « sommet » suppression Ajout L’ajout et la suppression d’élément se font sommet « par le même côté » eN … … e2 e1 Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Implémentation Implémentation d’un type abstrait = réalisation concrète de ce type précisant : La définition de la structure de données Les algorithmes des services (primitives) associés Deux implémentations possibles Représentation contiguë : tableaux Représentation chaînée : listes chaînées Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données empiler : Élément x Pile -> Pile ajoute un élément « au dessus » de la pile avec pile non pleine dépiler : Pile -> Pile supprime l’élément « au dessus » de la pile lirePile : Pile -> Élément lit le dernier élément inséré dans la pile (sommet) pileVide : Pile -> Booléen renvoie VRAI si la pile ne contient aucun élément Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Piles en représentation contiguë Structure de données Type Élément = . . . //dépend du problème Type Tab = tableau [1 à MAX] de Élément Type Pile = Structure corps : Tab taille : Entier //nombre d’élément finStructure Pile Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Piles en représentation contiguë Algorithmes des services procédure créerPile (var p: Pile) p->taille <- 0 finProcédure créerPile Fonction pileVide (p :Pile): Booléen retourner (p.taille = 0) finFonction pileVide Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Algorithmes des services Fonction lirePile (p : Pile) : Élément si pileVide (p) alors Erreur sinon retourner p.corps[p.taille] finSi finFonction lirePile Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Algorithmes des services Algorithmes des services procédure empiler (entrée e : Élément, var p :Pile) si (p->taille< MAX) alors p->corps [p->taille] <- e p->taille <- p->taille + 1 sinon Erreur //possibilité de ré-allocation du tableau finSi finProcédure empiler Fonction dépiler (var p :Pile): Element si pileVide (p) alors Erreur sinon p->taille <- p->taille – 1 retourne p->corps[p->taille+1] finSi finProcédure dépiler 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 Exemple Structures récursives créerPile(p) taille = 0 1 empiler(1,p) taille = 0 taille = 1 empiler(2,p) taille = 1 taille = 2 dépiler(p) taille = 2 taille = 1 2 2 4 .. MAX 1 2 2 4 .. MAX 1 2 1 2 2 4 .. MAX 1 2 1 2 2 4 .. MAX 1 Permet de définir des structures de données dites chaînées Exemple type Liste = ↑ Maillon type Maillon = Structure valeur : Entier; suivant : ↑ Maillon; finStructure Variable maListe : Liste Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Piles en représentation chaînée Structure de données Type Élément = . . . //dépend du problème Type ↑ Maillon = PtrMaillon Type Maillon = Structure valeur : Élément ; suivant : PtrMaillon; finStructure Maillon Type ListeP = PtrMaillon Type Pile = ListeP //le sommet 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 Piles en représentation chaînée Algorithmes des services Procédure créerPile ( p : Pile ) p = listeVide() finProcédure créerPile Fonction pileVide (p :Pile) : Booléen retourner (p = nil) finFonction pileVide Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Algorithmes des services Algorithmes des services Fonction lirePile (p : Pile) : Élément début procédure empiler (entrée e : Élément,var p :Pile) début insererApres(p,nil,e) si pileVide (p) alors retourner CODE_ERREUR sinon retourner ieme(p,longueur(p)) finProcédure empiler finFonction lirePile Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Algorithmes des services procédure dépiler (var p :Pile) Variable monMaillon : PtrMaillon début si pileVide (p) alors Erreur sinon supprimerQueue(p) finSi finProcédure dépiler Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Exercices Suppression de la récursivité Une image en informatique peut être représentée par une matrice de points m ayant XMAX colonnes et YMAX lignes. Un élément m[x][y] de la matrice représente la couleur du point p de coordonnées (x;y). On propose d'écrire ici une fonction qui, à partir d'un point p, "étale" une couleur c autour de ce point. La progression de la couleur étalée s'arrête quand elle rencontre une couleur autre que celle du point p. La figure suivante illustre cet exemple, en considérent p = (3;4). Ecrire cette fonction de manière récursive puis utiliser le principe de la pile (mise en oeuvre dans les appels récursifs) pour proposé une version itérative de la fonction. 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 Exercices La tour de Hanoi Les poteaux sont représentés par des piles d'entiers numérotées 0,1 et 2. Le jeu entier sera alors représenté par un tableau t de trois piles. On suppose qu'il y a n anneaux dans le jeu. On attribue à chaque anneau un numéro de manière à ce que si l'anneau a est plus petit que l'anneau b, alors son numéro est plus petit. Avec n = 5 on a 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 Comme la pile ne permet l'accès qu'à un seul de ses éléments, son usage est limité. La pile peut être très utile pour supprimer la récursivité d'une fonction. La différence entre la modélisation par liste chaînée et la modélisation par tableau est très faible. L'inconvénient du tableau est que sa taille est fixée à l'avance, contrairement à la liste chaînée qui n'est limitée que par la taille de la mémoire centrale de l'ordinateur. La liste chaînée effectue une allocation dynamique de mémoire à chaque ajout d'élément et une libération de mémoire à chaque retrait du sommet de la pile. 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