Les tableaux et les listes sont des structures basiques et ne permettent pas la résolution de certains problèmes.
Les piles sont comme une pile d’assiettes.
On dispose de fonctions permettant les opérations sur les piles :
p = creer_pile() empiler(p, e) depiler(p) elt = sommet(p) vide = pile_vide(p) pleine = pile_pleine(p)
On peut modéliser les piles de différentes manières
On peut voir les piles comme des listes :
La tête s’appelle maintenant sommet, on empile en ajoutant un élément avant la tête, on dépile en enlevant le sommet et en le déplaçant.
La pile ici ne sera jamais pleine.
def creer_pile():
p = Pile(sommet=None)
return p
def pile_vide(p):
return p.sommet == None
def empile(p, e):
ptr = new_maillon()
ptr.suivant = p.sommet
ptr.valeur = e
p.sommet = ptr
Renvoi au cours d’algo.
On cherche à déterminer si une expression est bien parenthésée ou non. On va utiliser les piles pour résoudre ce problème :
def check_parentheses(expression):
pile = creer_pile()
for car in expression:
if car == '(' or car == '[':
empile(pile, car)
elif car == ')':
if pile_vide(pile) or sommet(pile) != '(':
return False
depile(pile)
elif car == ']':
if pile_vide(pile) or sommet(pile) != '[]':
return False
depile(pile)
i += 1
return pile_vide(pile)