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

Documents pareils