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.valeur = valeur
|
||||||
self.suivant = suivant
|
self.suivant = suivant
|
||||||
|
|
||||||
m3 = Maillon(30)
|
m3 = Maillon("Florizarre")
|
||||||
m2 = Maillon(20, m3)
|
m2 = Maillon("Herbizarre", m3)
|
||||||
m1 = Maillon(10, m2)
|
m1 = Maillon("Bulbizarre", m2)
|
||||||
```
|
```
|
||||||
|
|
||||||
1. Représenter schématiquement la liste chaînée obtenue (avec les flèches).
|
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
|
## 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
|
```python
|
||||||
def afficher(liste):
|
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 ?
|
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 ?
|
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.
|
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.
|
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
|
# 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
|
## 1. Limite des tableaux pour certains usages
|
||||||
|
|
||||||
@@ -31,13 +33,14 @@ class Maillon:
|
|||||||
On peut enchaîner des maillons manuellement :
|
On peut enchaîner des maillons manuellement :
|
||||||
|
|
||||||
```python
|
```python
|
||||||
m3 = Maillon(30)
|
m3 = Maillon("Florizarre")
|
||||||
m2 = Maillon(20, m3)
|
m2 = Maillon("Herbizarre", m3)
|
||||||
m1 = Maillon(10, m2)
|
m1 = Maillon("Bulbizarre", m2)
|
||||||
# m1 → m2 → m3 → None
|
# Bulbizarre → Herbizarre → Florizarre → None
|
||||||
# 10 → 20 → 30 → 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
|
## 3. La classe ListeChainee
|
||||||
@@ -62,8 +65,8 @@ def inserer_en_tete(self, valeur):
|
|||||||
```
|
```
|
||||||
|
|
||||||
```
|
```
|
||||||
Avant : tete → [20] → [30] → None
|
Avant : tete → [Herbizarre] → [Florizarre] → None
|
||||||
Après : tete → [10] → [20] → [30] → None
|
Après : tete → [Bulbizarre] → [Herbizarre] → [Florizarre] → None
|
||||||
```
|
```
|
||||||
|
|
||||||
### Supprimer en tête
|
### Supprimer en tête
|
||||||
@@ -91,11 +94,11 @@ def afficher(self):
|
|||||||
|
|
||||||
```python
|
```python
|
||||||
l = ListeChainee()
|
l = ListeChainee()
|
||||||
l.inserer_en_tete(30)
|
l.inserer_en_tete("Florizarre")
|
||||||
l.inserer_en_tete(20)
|
l.inserer_en_tete("Herbizarre")
|
||||||
l.inserer_en_tete(10)
|
l.inserer_en_tete("Bulbizarre")
|
||||||
l.afficher()
|
l.afficher()
|
||||||
# 10 → 20 → 30 → None
|
# Bulbizarre → Herbizarre → Florizarre → None
|
||||||
```
|
```
|
||||||
|
|
||||||
### Longueur
|
### Longueur
|
||||||
|
|||||||
Reference in New Issue
Block a user