En Travauxmoyenprogrammation orientée objetstructure linéaire
Listes chaînées en POO
Une liste chaînée est une structure de données classique en informatique. Elle permet de stocker un nombre quelconque de valeurs tout en maintenant un ordre en elles (la première valeur précède la deuxième qui précède elle-même la troisième etc).
On se propose dans cet exercice de mettre en œuvre les listes chaînée à l'aide de la programmation orientée objet.
Pour ce faire on va utiliser deux classes :
la classe Maillon qui représentera les différents éléments de la liste chaînée ;
la classe ListeChainee qui représentera la liste chaînée à proprement parler.
Classe Maillon
Une liste chaînée est une succession de Maillon. Chacun d'entre eux est caractérisé par deux attributs :
sa valeur qui peut être quelconque et qui est obligatoirement fournie lors de l'instanciation de l'objet ;
son successeur qui est soit vide (None en Python) soit un autre Maillon.
Cette structure de données permet donc de stocker, dans chaque Maillon, une unique valeur tout en pointant vers le prochain Maillon qui contient la valeur suivante etc.
Un Maillon dont l'attribut successeur est None est le dernier de la chaîne.
On a chargé dans l'éditeur ci-dessous une classe Maillon dont le code est fourni ci-dessous 1. Vous pouvez l'utiliser sans l'importer.
Code de la classe Maillon
classMaillon:""" Classe représentant un maillon d'une liste chaînée Attributs : * valeur : une valeur de type quelconque * successeur : le successeur de ce Maillon. Cet attribut vaut None si ce Maillon n'a pas de successeur Dans le cas contraire, le successeur est lui même un Maillon Exemples : >>> troisieme = Maillon("Loulou") >>> deuxieme = Maillon("Fifi") >>> deuxieme.successeur = troisieme >>> premier = Maillon("Riri", deuxieme) """def__init__(self,valeur,successeur=None):self.valeur=valeurself.successeur=successeurdef__str__(self):ifself.successeurisNone:prochain="∅"else:prochain=f"{self.successeur}"returnf"{self.valeur} -> {prochain}"
Compléter l'éditeur afin de répondre aux questions.
###(Dés-)Active le code après la ligne # Tests (insensible à la casse) (Ctrl+I)
Entrer ou sortir du mode "deux colonnes" (Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran" (Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Une instance de la classe ListeChainee est caractérisé par un unique attribut : sa tete.
Celle-ci vaut None si la liste est vide.
Dans le cas contraire, la tete est un objet de type Maillon. Ceux-ci pouvant être enchaînés les uns à la suite des autres, la seule connaissance du premier Maillon permet de retrouver tous les éléments de la liste.
On souhaite donc écrire une classe ListeChainee répondant au contrat suivant :
une liste chaînée possède un unique attribut nommé tete tel que décrit ci-dessus ;
lors de sa création, une liste chaînée est initialement vide. Le constructeur ne prend donc pas de paramètre (hormis self) ;
la méthode est_vide renvoie le booléen indiquant si la liste est vide ou non ;
la méthode cons (pour construit) prend en paramètre une valeur et ajoute celle-ci au début de la liste.
On précise que, compte-tenu de l'implantation souhaitée, ajouter une valeur au début de la liste chaînée nécessite d'ajouter un nouveau Maillon en tête de liste.
la méthode longueur renvoie le nombre d'éléments présents dans la liste.
Compléter l'éditeur ci-dessous en écrivant le code de la classe ListeChainee. Le code de la classe
Maillon est déjà chargé, vous pouvez l'utiliser sans l'importer.
###(Dés-)Active le code après la ligne # Tests (insensible à la casse) (Ctrl+I)
Entrer ou sortir du mode "deux colonnes" (Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran" (Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
la méthode __str__ met en forme l'affichage d'un objet. Cette fonction est appelée lors des conversions au format str par exemple lorsque l'on fait print(objet). ↩
# Tests(insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)