I : Les piles - PC* Carnot Dijon

publicité
Structure de pile
PC*
I : Les piles
Une manière naturelle de ranger des objets dans un placard, sur un
bureau ou même dans une pochette de cours est de les empiler. C'est
une opération peu coûteuse car "ranger" un nouvel élément consiste
simplement à le mettre au-dessus de la pile.
Ce mode de rangement est adapté à des données dont on ne connaît
pas à l'avance le nombre. Une pile d'assiettes peut être par exemple (en
théorie) de hauteur illimitée !
Ce beau rangement a cependant un inconvénient : on ne peut accéder
qu'au dernier élément rangé, celui qui est au dessus de la pile. Pensez au
moment où, devant la pile de vos pulls soigneusement pliés, vous réalisez
que vous voulez atteindre celui du bas !
À une structure de pile on associe l'acronyme anglais imagé LIFO :
Last In, First Out c.a.d. dernier entré, premier sorti.
1. Quelques exemples
(a) Répondre au courrier avec une structure de pile. Qu'en penser ?
(b) Stocker les pages visitées lors d'une navigation sur la toile.
(c) Stockage des instructions eectuées dans une logiciel de traitement de texte. Utilité ?
(d) Préparation des étapes d'une recette de cuisine, d'une réaction
chimique...
(e) Comment coder sous forme d'une pile l'ensemble des opérations
aboutissant au calcul de A = (1 + 2)4 + 3 ?
2. Opérations sur les piles
On doit pouvoir disposer des opérations élémentaires naturelles :
créer une pile, empiler un élément au dessus de la pile, ôter un
élément du dessus de la pile (dépiler). On peut par exemple noter :
(a)
(c) : renvoie une nouvelle pile de capacité c qui est
initialement vide.
Mais, si cela est possible, on cherchera à créer une pile sans
préciser à priori de capacité maximale. On devrait disposer de
creer_pile() : crée et renvoie une liste vide.
creer_pile
I.P.T. 1
Structure de pile
PC*
(b)
(p) : dépile et retourne le sommet de la pile p. Cette
pile est modiée. En anglais pop.
(c) empiler(p,a) : place la valeur a sur le sommet de la pile p. La
pile est modiée. En anglais push.
depiler
3. Opérations complémentaires sur les piles
On utilise également couramment les fonctions primitives suivantes :
(a) taille(p) : retourne le nombre d'éléments présents dans la pile.
(b) est_vide(p) : renvoie True si la liste est vide, False sinon.
(c) sommet(p) : retourne l'élément situé au sommet de la pile,
sans modier la pile. (en anglais peek).
II : Simulation des piles avec Python
1. Utilisation des listes
Une liste python peut représenter une pile en convenant que l'élément le plus à droite représente le sommet de la pile.
Des exemples de fonctions élémentaires pour manipuler des listes
comme des piles.
def creer_pile :
◦ creer_pile() :
return [ ]
(p,a) :
◦
empiler
◦
depiler
◦
sommet
◦
est_vide
(p) :
def
def
(p) :
def
(p) :
empiler(p, a) :
p.append(a)
depiler(p) :
p.pop()
sommet(p) :
return p[−1]
def
est_vide(p) :
len(p) == 0
2. Convention d'utilisation
Si on veut simuler un problème utilisant une structure de pile on
pourra si on le désire les listes en se limitant aux opérations de base
qui leur donne cette structure de pile.
Les écritures d'algorithme peuvent s'écrire elles en utilisant la sytaxe des fonctions empliler, depiler etc
I.P.T. 2
Téléchargement