# ======================= Cellule =========================================== class Cellule: def __init__(self, val, suiv): self.val = val self.suiv = suiv # ====================== ListeChainee ======================================== class ListeChainee: """ Liste simplement chaînée non circulaire""" def __init__(self): self.premier = None def estVide(self): return self.premier == None def nbElements(self): nb = 0 elt = self.premier while elt: nb += 1 elt = elt.suiv return nb def iemeElement(self, indice): elt = self.premier for i in range(indice): elt = elt.suiv if elt == None: print("Erreur iemeElement : indice trop grand") return elt.val def modifierIemeElement(self, indice, valElement): elt = self.premier for i in range(indice): elt = elt.suiv if elt == None: print("Erreur modifierIemeElement : indice trop grand") elt.val = valElement def afficher(self): elt = self.premier while elt: print(elt.val, end=' ') elt = elt.suiv print() def ajouterEnTete(self, valElement): elt = Cellule(valElement, self.premier) self.premier = elt def insererDansListeTriee(self,cellule,valElement): celluleSuivante = cellule.suiv if celluleSuivante == None or celluleSuivante.val > valElement: elt = Cellule(valElement, celluleSuivante) cellule.suiv = elt else: self.insererDansListeTriee(celluleSuivante,valElement) def ajouterDansListeTriee(self, valElement): if self.estVide(): self.ajouterEnTete(valElement) else: if self.premier.val > valElement: self.ajouterEnTete(valElement) else: self.insererDansListeTriee(self.premier,valElement) def supprimerTete(self): elt = self.premier self.premier = elt.suiv def rechercheElement(self, valElement): elt = self.premier trouve = False pos = 0 while elt and not trouve: if valElement == elt.val: trouve = True else: elt = elt.suiv pos += 1 if trouve: return pos else: return -1 def chargerDepuisFichier(self,nomFichier): with open(nomFichier) as fichier: for ligne in fichier: self.insererDansListeTriee(ligne) # ========================== programme de test ===================================== # lc = ListeChainee() # print("Ajout en tete de 5 '2' 4 : ", end='') # lc.ajouterEnTete(5) # lc.ajouterEnTete("2") # lc.ajouterEnTete(4) # lc.afficher() # # print("Valeur de l'element a l'indice 1 : ", lc.iemeElement(1)) # # print("Modification de l'element a l'indice 1 (1.6) : ", end='') # lc.modifierIemeElement(1, 1.6) # lc.afficher() # # print("Nombre d'elements : ", lc.nbElements()) # # print("Suppression de l'element de tete : ", end='') # lc.supprimerTete() # lc.afficher() # # print("Recherche de la valeur 5 : ", lc.rechercheElement(5)) # print("Recherche de la valeur 'coucou' : ", lc.rechercheElement("coucou")) # # lcmots = ListeChainee() # print("Ajout dans liste triee de 'abc' 'edf' 'b' 'a' : ", end='') # lcmots.ajouterDansListeTriee("abc") # lcmots.ajouterDansListeTriee("edf") # lcmots.ajouterDansListeTriee("b") # lcmots.ajouterDansListeTriee("a") # lcmots.afficher()