Structure de pile¶
04-03-2023
Objectifs
connaître la structure de données pile
savoir en donner une implantation
savoir l’utiliser
Motivation¶
Structure de données importante en informatique :
pile des appels de fonctions
utile pour parcours de graphes (trouver un chemin)
exemple de l’évaluation d’expressions postfixées
Opérations primitives sur les piles¶
Les piles sont des structures de données linéaires admettant les opérations primitives suivantes :
création d’une pile ;
empilement d’un élément sur une pile ;
dépilement d’une pile ;
consultation du sommet d’une pile ;
test de vacuité d’une pile.
Note
Les piles peuvent contenir en principe autant d’éléments qu’on veut (cependant en réalité elles sont en général limitées par la mémoire disponible). Mais il n’est pas possible d’accéder directement à n’importe lequel de ces éléments : seul l’élément qui y a été placé en dernier est accessible, les autres ne l’étant pas tant que ce dernier élément n’a pas été sorti de la pile. C’est le principe du dernier entré, premier sorti ou Last In First Out (LIFO en abrégé).
Constructeurs¶
La construction d’une nouvelle pile ne nécessite aucun paramètre :
- ApStack.__init__()¶
- Build
a new empty stack
- UC
none
- ::
>>> st = ApStack() >>> st <apstack.ApStack at 0x7f543814f3d0>
Sélecteurs¶
Seul sélecteur sur les piles la méthode de consultation du sommet d’une pile :
- ApStack.top()¶
- Renvoie
element on top of self without removing it
- UC
self must be non empty
Modificateurs¶
La structure de pile est une structure de données mutable. Cela signifie que sa valeur ou son état peut changer au cours du temps.
Deux opérations primitives permettent cette mutabilité :
l’empilement ;
et le dépilement.
La méthode d’empilement :
- ApStack.push(x)¶
- Paramètres
x (any) – a value
- Renvoie
None
- Type renvoyé
Nonetype
- Side effect
stack self contains a new value : x
- UC
none
- ::
>>> st.push(42) >>> st.push(3) >>> st.push(14)
et celle de dépilement :
- ApStack.pop()¶
- Renvoie
element on top of self
- Side effect
self contains an element less
- UC
self must be non empty
- ::
>>> st.top() 14 >>> st.pop() 14 >>> st.pop() 3
Prédicat¶
Un prédicat permettant de tester la vacuité d’une pile :
- ApStack.is_empty()¶
- Renvoie
True
if s is emptyFalse
otherwise
- Type renvoyé
bool
- UC
none
- ::
>>> st.isempty() False >>> st.pop() 42 >>> st.is_empty() True
Une nouvelle exception¶
Le sélecteur top
et le modificateur pop
sont soumis à une contrainte de non
vacuité de la pile à laquelle ils s’appliquent. Le non respect de cette contrainte
déclenche une exception définie par le
- class apstack.ApStackEmptyError(msg)¶
Exception for empty stacks
- ::
>>> st.pop() ApStackEmptyError: empty stack, nothing to pop
Remarque¶
Note
À l’aide de ces fonctions primitives, le principe du dernier entré premier sorti peut être formalisé par le fait qu’à l’issue des deux instructions
- ::
>>> st = ApStack() >>> st.push(x) >>> y = st.pop() >>> x == y True
la variable y
a la même valeur que la variable x
et que l’état de la pile st
est
exactement le même qu’avant la première des deux instructions.
Et de même, en supposant que st
n’est pas vide, après les deux instructions
>>> y = st.pop()
>>> st.push(y)
la pile st
est inchangée.