Listes chaînées : schémas Mermaid et analogie poupées russes

This commit is contained in:
2026-06-16 10:11:18 +02:00
parent 0863455d47
commit ef2895eaa3

View File

@@ -41,6 +41,14 @@ m1 = Maillon("Bulbizarre", m2)
Chaque Pokémon connait son évolution suivante - mais pas la précédente. C'est exactement le principe du maillon.
```mermaid
flowchart LR
A["Bulbizarre\n(valeur)"] -->|"suivant"| B["Herbizarre\n(valeur)"]
B -->|"suivant"| C["Florizarre\n(valeur)"]
C -->|"suivant"| N["None"]
style N fill:#eee,stroke:#aaa,color:#aaa
```
---
## 3. La classe ListeChainee
@@ -129,17 +137,33 @@ def rechercher(self, valeur):
## 4. Structure récursive
Une liste chaînée est naturellement **récursive** :
- soit elle est **vide**
> **Analogie - les poupées russes.** Une matriochka contient soit *rien du tout*, soit *une poupée* et *une autre matriochka* à l'intérieur. Une liste chaînée, c'est exactement pareil : soit elle est vide, soit elle est un maillon qui contient une valeur... et une autre liste chaînée.
Une liste chaînée est donc naturellement **récursive** :
- soit elle est **vide** (`None`)
- soit elle est un **maillon** (tête) suivi d'une **liste chaînée** (queue)
```mermaid
flowchart LR
subgraph "Liste chaînée"
A["Bulbizarre"] --> subgraph2
subgraph subgraph2["Liste chaînée"]
B["Herbizarre"] --> subgraph3
subgraph subgraph3["Liste chaînée"]
C["Florizarre"] --> N["None\n(liste vide)"]
end
end
end
style N fill:#eee,stroke:#aaa,color:#aaa
```
On peut écrire la longueur de manière récursive :
```python
def longueur_rec(maillon):
if maillon is None:
if maillon is None: # liste vide : 0 poupée
return 0
return 1 + longueur_rec(maillon.suivant)
return 1 + longueur_rec(maillon.suivant) # 1 + longueur du reste
```
Cette vision récursive ("tête + queue") est la même qu'on retrouve dans les arbres (chapitre Arbres).