Listes chaînées : exemples Pokémon/GoT, suppression tirets cadratins

This commit is contained in:
2026-06-16 10:05:06 +02:00
parent bbcf5ac7a9
commit 0863455d47
2 changed files with 23 additions and 19 deletions

View File

@@ -1,4 +1,4 @@
# Exercices Listes chaînées
# Exercices - Listes chaînées
---
@@ -12,9 +12,9 @@ class Maillon:
self.valeur = valeur
self.suivant = suivant
m3 = Maillon(30)
m2 = Maillon(20, m3)
m1 = Maillon(10, m2)
m3 = Maillon("Florizarre")
m2 = Maillon("Herbizarre", m3)
m1 = Maillon("Bulbizarre", m2)
```
1. Représenter schématiquement la liste chaînée obtenue (avec les flèches).
@@ -26,7 +26,8 @@ m1 = Maillon(10, m2)
## Exercice 2 : Parcourir une liste
On dispose d'une liste chaînée `l` dont la tête pointe vers `10 → 20 → 30 → 40 → None`.
On dispose d'une liste chaînée `l` représentant une lignée de rois fictifs :
`Aegon I → Aenys I → Maegor I → Jaehaerys I → None`
```python
def afficher(liste):
@@ -38,7 +39,7 @@ def afficher(liste):
1. Dérouler manuellement l'exécution de `afficher(l)` : quelle est la valeur de `courant` à chaque tour de boucle ?
2. Combien de fois la boucle s'exécute-t-elle ?
3. Modifier la fonction pour qu'elle affiche les valeurs séparées par ` ` sur une seule ligne (comme dans le cours).
3. Modifier la fonction pour qu'elle affiche les valeurs séparées par ` -> ` sur une seule ligne (comme dans le cours).
---
@@ -78,7 +79,7 @@ Pour une liste chaînée de longueur n, indiquer la complexité (O(1) ou O(n)) d
2. Écrire la fonction récursive `rechercher_rec(maillon, valeur)` qui renvoie `True` si `valeur` est présente, `False` sinon.
3. Écrire la fonction récursive `renverser(maillon)` qui renvoie une nouvelle liste chaînée dont les éléments sont dans l'ordre inverse.
*Exemple : `10 → 20 → 30 → None` devient `30 → 20 → 10 → None`.*
*Exemple : `Bulbizarre -> Herbizarre -> Florizarre -> None` devient `Florizarre -> Herbizarre -> Bulbizarre -> None`.*
---

View File

@@ -1,6 +1,8 @@
# Listes chaînées
> Un tableau Python (`list`) permet d'accéder à n'importe quel élément en O(1) grâce aux indices mais insérer ou supprimer un élément au milieu déplace tous ceux qui suivent. La liste chaînée adopte une autre approche : chaque élément connaît son successeur, et seuls les liens changent lors d'une modification.
> Un tableau Python (`list`) permet d'accéder à n'importe quel élément en O(1) grâce aux indices, mais insérer ou supprimer un élément au milieu déplace tous ceux qui suivent.
>
> La liste chaînée adopte une autre approche : chaque élément connaît son successeur, et seuls les liens changent lors d'une modification.
## 1. Limite des tableaux pour certains usages
@@ -31,13 +33,14 @@ class Maillon:
On peut enchaîner des maillons manuellement :
```python
m3 = Maillon(30)
m2 = Maillon(20, m3)
m1 = Maillon(10, m2)
# m1 → m2 → m3 → None
# 10 → 20 → 30 → None
m3 = Maillon("Florizarre")
m2 = Maillon("Herbizarre", m3)
m1 = Maillon("Bulbizarre", m2)
# Bulbizarre → Herbizarre → Florizarre → None
```
Chaque Pokémon connait son évolution suivante - mais pas la précédente. C'est exactement le principe du maillon.
---
## 3. La classe ListeChainee
@@ -62,8 +65,8 @@ def inserer_en_tete(self, valeur):
```
```
Avant : tete → [20] → [30] → None
Après : tete → [10] → [20] → [30] → None
Avant : tete → [Herbizarre] → [Florizarre] → None
Après : tete → [Bulbizarre] → [Herbizarre] → [Florizarre] → None
```
### Supprimer en tête
@@ -91,11 +94,11 @@ def afficher(self):
```python
l = ListeChainee()
l.inserer_en_tete(30)
l.inserer_en_tete(20)
l.inserer_en_tete(10)
l.inserer_en_tete("Florizarre")
l.inserer_en_tete("Herbizarre")
l.inserer_en_tete("Bulbizarre")
l.afficher()
# 10 → 20 → 30 → None
# Bulbizarre → Herbizarre → Florizarre → None
```
### Longueur