2019-2020/Formations/NSI/Bloc1/diubloc1-files-td3/libdiulistechainee.py

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()