125 lines
3.5 KiB
Python
125 lines
3.5 KiB
Python
# ======================= 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()
|