Mattheo
2 years ago
2 changed files with 112 additions and 1 deletions
@ -0,0 +1,111 @@ |
|||||
|
#!/usr/bin/env python3 |
||||
|
# -*- coding: utf-8 -*- |
||||
|
""" |
||||
|
Created on Tue Sep 22 20:44:35 2020 |
||||
|
|
||||
|
@author: manu |
||||
|
""" |
||||
|
|
||||
|
|
||||
|
class Maillon: |
||||
|
"""Un maillon d'une liste chaînée.""" |
||||
|
def __init__(self, valeur, suivant): |
||||
|
self.valeur = valeur |
||||
|
self.suivant = suivant |
||||
|
|
||||
|
def __str__(self): |
||||
|
"""Renvoie une chane de caractères représentant le maillon.""" |
||||
|
return str(self.valeur) |
||||
|
|
||||
|
|
||||
|
class ListeChaine: |
||||
|
"""Une liste chaînée.""" |
||||
|
def __init__(self, tete=None): |
||||
|
"""Crée une liste vide, ou une liste dont la tete (un maillon) |
||||
|
est donnée.""" |
||||
|
self.__tete = tete |
||||
|
|
||||
|
def est_vide(self): |
||||
|
"""Indique si la liste est vide.""" |
||||
|
return self.__tete is None |
||||
|
|
||||
|
def tete(self): |
||||
|
"""Renvoie la valeur du premier élément de la liste.""" |
||||
|
if self.est_vide(): |
||||
|
raise IndexError("La liste vide n'a pas de tête") |
||||
|
return self.__tete.valeur |
||||
|
|
||||
|
def queue(self): |
||||
|
"""Renvoie la queue de la liste.""" |
||||
|
if self.est_vide(): |
||||
|
raise IndexError("La liste vide n'a pas de queue") |
||||
|
return ListeChaine(self.__tete.suivant) |
||||
|
|
||||
|
def ajoute(self, valeur): |
||||
|
"""ajoute `valeur` en tête de la liste.""" |
||||
|
self.__tete = Maillon(valeur, self.__tete) |
||||
|
|
||||
|
def __str__(self): |
||||
|
"""Renvoie une chaîne de caractères représentant la liste.""" |
||||
|
maillon = self.__tete |
||||
|
s = '' |
||||
|
while maillon is not None: |
||||
|
s = s + str(maillon.valeur) |
||||
|
maillon = maillon.suivant |
||||
|
if maillon is not None: |
||||
|
s += '->' |
||||
|
return s |
||||
|
|
||||
|
def __len__(self): |
||||
|
"""Renvoie la longueur de la liste.""" |
||||
|
maillon = self.__tete |
||||
|
long = 0 |
||||
|
while maillon is not None: |
||||
|
long = long + 1 |
||||
|
maillon = maillon.suivant |
||||
|
return long |
||||
|
|
||||
|
def __getitem__(self, n): |
||||
|
"""Renvoie l'élément d'indice n de la liste.""" |
||||
|
maillon = self.__tete |
||||
|
i = 0 |
||||
|
while i < n and maillon is not None: |
||||
|
i = i + 1 |
||||
|
maillon = maillon.suivant |
||||
|
if maillon is None or n < 0: |
||||
|
raise IndexError("Indice non valide") |
||||
|
return maillon.valeur |
||||
|
|
||||
|
def __add__(self, other): |
||||
|
"""Renvoie la liste correspondant à la concaténation des 2 listes.""" |
||||
|
if self.est_vide(): |
||||
|
return other |
||||
|
v = self.tete() |
||||
|
q = self.queue() |
||||
|
return ListeChaine(Maillon(v, (q + other).__tete)) |
||||
|
|
||||
|
def reverse(self): |
||||
|
"""Renvoie une liste correspondant à la liste renversée.""" |
||||
|
res = ListeChaine() |
||||
|
maillon = self.__tete |
||||
|
while maillon is not None: |
||||
|
res.ajoute(maillon.valeur) |
||||
|
maillon = maillon.suivant |
||||
|
return res |
||||
|
|
||||
|
|
||||
|
if __name__ == "__main__": |
||||
|
lst = ListeChaine() |
||||
|
print(lst.est_vide()) |
||||
|
lst.ajoute(306) |
||||
|
lst.ajoute(42) |
||||
|
lst.ajoute(205) |
||||
|
print(lst) |
||||
|
print(lst.est_vide()) |
||||
|
print(lst[0]) |
||||
|
print(lst[1]) |
||||
|
print(len(lst)) |
||||
|
lst2 = ListeChaine() |
||||
|
lst2.ajoute(18) |
||||
|
lst2.ajoute(45) |
||||
|
print(lst + lst2) |
Loading…
Reference in new issue