diff --git a/Structures_lineaires/Listes_chainees/EXERCICES.md b/Structures_lineaires/Listes_chainees/EXERCICES.md index 657b2b5..1ca5f64 100644 --- a/Structures_lineaires/Listes_chainees/EXERCICES.md +++ b/Structures_lineaires/Listes_chainees/EXERCICES.md @@ -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`.* --- diff --git a/Structures_lineaires/Listes_chainees/README.md b/Structures_lineaires/Listes_chainees/README.md index bf4e9e0..be9ed5e 100644 --- a/Structures_lineaires/Listes_chainees/README.md +++ b/Structures_lineaires/Listes_chainees/README.md @@ -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