Adloun

NSI (terminale) · Chapitre 1 · Application directe du cours

Problème — Implémentation complète d'une pile par une classe

Structures de données linéaires · niveau 1 (application)

Énoncé

Problème — Implémentation complète d'une pile par une classe.

Implémenter une classe Pile respectant l'interface du type abstrait pile (est_vide, empiler, depiler, sommet, taille), gérant proprement les erreurs, puis l'utiliser pour évaluer si une expression ne contenant que des parenthèses, crochets et accolades est correctement fermée.

Corrigé


class Pile:
    """Type abstrait pile (LIFO) implemente par une liste."""

    def __init__(self):
        self._contenu = []

    def est_vide(self):
        return len(self._contenu) == 0

    def empiler(self, x):
        self._contenu.append(x)

    def depiler(self):
        if self.est_vide():
            raise IndexError("depiler sur une pile vide")
        return self._contenu.pop()

    def sommet(self):
        if self.est_vide():
            raise IndexError("sommet sur une pile vide")
        return self._contenu[-1]

    def taille(self):
        return len(self._contenu)


def bien_ferme(expr):
    """Verifie l'appariement de (), [] et {}."""
    paires = {")": "(", "]": "[", "}": "{"}
    pile = Pile()
    for c in expr:
        if c in "([{":
            pile.empiler(c)             # ouvrante : on empile
        elif c in ")]}":
            if pile.est_vide():
                return False            # fermante sans ouvrante
            if pile.depiler() != paires[c]:
                return False            # mauvais appariement
    return pile.est_vide()             # tout doit etre referme

# Tests
print(bien_ferme("([]{})"))    # True
print(bien_ferme("([)]"))      # False (croisement)
print(bien_ferme("(()"))       # False (ouvrante en trop)

La pile mémorise les symboles ouvrants en attente. À chaque symbole fermant, on vérifie qu'il correspond au dernier ouvrant rencontré : c'est exactement le comportement LIFO. Toutes les opérations de pile étant en et chaque caractère étant traité une fois, le coût total est .

100 % gratuit

Essaie le suivant avec le tuteur

Faire l'exercice suivant avec le tuteur

Sans compte : le cours, le premier QCM, 2 minutes de podcast et de vidéo et un exercice avec le tuteur. Pour tout le reste : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant avec le tuteur →