From ef2895eaa3fe0cbc5e656141fc688ca41e7bfaaf Mon Sep 17 00:00:00 2001 From: Florian Mathieu Date: Tue, 16 Jun 2026 10:11:18 +0200 Subject: [PATCH] =?UTF-8?q?Listes=20cha=C3=AEn=C3=A9es=20:=20sch=C3=A9mas?= =?UTF-8?q?=20Mermaid=20et=20analogie=20poup=C3=A9es=20russes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Listes_chainees/README.md | 32 ++++++++++++++++--- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/Structures_lineaires/Listes_chainees/README.md b/Structures_lineaires/Listes_chainees/README.md index be9ed5e..74ea5f8 100644 --- a/Structures_lineaires/Listes_chainees/README.md +++ b/Structures_lineaires/Listes_chainees/README.md @@ -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).