Listes chaînées : exemples Pokémon/GoT, suppression tirets cadratins
This commit is contained in:
@@ -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`.*
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user