Listes chaînées : schémas Mermaid et analogie poupées russes
This commit is contained in:
@@ -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.
|
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
|
## 3. La classe ListeChainee
|
||||||
@@ -129,17 +137,33 @@ def rechercher(self, valeur):
|
|||||||
|
|
||||||
## 4. Structure récursive
|
## 4. Structure récursive
|
||||||
|
|
||||||
Une liste chaînée est naturellement **récursive** :
|
> **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.
|
||||||
- soit elle est **vide**
|
|
||||||
|
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)
|
- 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 :
|
On peut écrire la longueur de manière récursive :
|
||||||
|
|
||||||
```python
|
```python
|
||||||
def longueur_rec(maillon):
|
def longueur_rec(maillon):
|
||||||
if maillon is None:
|
if maillon is None: # liste vide : 0 poupée
|
||||||
return 0
|
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).
|
Cette vision récursive ("tête + queue") est la même qu'on retrouve dans les arbres (chapitre Arbres).
|
||||||
|
|||||||
Reference in New Issue
Block a user