NSI (terminale) · Chapitre 1 · Exercice de TD
Problème — File implémentée à deux piles
Structures de données linéaires · niveau 3 (difficile)
Énoncé
Problème — File implémentée à deux piles.
Un exercice classique consiste à réaliser une file (FIFO) en n'utilisant que deux piles (LIFO). Implémenter une classe FileDeuxPiles avec les méthodes enfiler et defiler, et expliquer le coût des opérations.
Corrigé
L'idée : une pile entree reçoit les éléments enfilés ; une pile sortie sert à les défiler. Quand sortie est vide, on y transvase tout le contenu de entree, ce qui inverse l'ordre et place le plus ancien au sommet.
class FileDeuxPiles:
def __init__(self):
self._entree = [] # pile ou l'on empile les arrivees
self._sortie = [] # pile d'ou l'on defile
def est_vide(self):
return len(self._entree) == 0 and len(self._sortie) == 0
def enfiler(self, x):
self._entree.append(x) # toujours dans la pile d'entree
def defiler(self):
if self.est_vide():
raise IndexError("defiler sur une file vide")
if len(self._sortie) == 0:
# transvasement : inverse l'ordre des elements
while len(self._entree) > 0:
self._sortie.append(self._entree.pop())
return self._sortie.pop() # le plus ancien est au sommet
# Test : FIFO attendu
f = FileDeuxPiles()
f.enfiler(1)
f.enfiler(2)
f.enfiler(3)
print(f.defiler()) # 1
print(f.defiler()) # 2
f.enfiler(4)
print(f.defiler()) # 3
print(f.defiler()) # 4
Analyse du coût : enfiler est toujours en . Une opération defiler peut déclencher un transvasement coûteux en , mais chaque élément n'est transvasé qu'une seule fois durant toute sa vie dans la file. Réparti sur l'ensemble des opérations, le coût amorti de defiler est donc .
100 % gratuit
Essaie le suivant avec le tuteur
- L'exercice suivant avec le tuteur, sans compte : il guide pas à pas, sans donner la réponse
- 8 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le podcast et la vidéo du chapitre : 2 minutes d'écoute sans compte
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.