forked from Q2-Wl/FinnBestmann_Kart
Dateien nach "Verkettete Liste" hochladen
This commit is contained in:
@@ -0,0 +1,111 @@
|
|||||||
|
from knoten import Knoten # Importiert die Klasse Knoten aus der Datei knoten.py
|
||||||
|
|
||||||
|
|
||||||
|
class Liste: # Erstellt die Klasse Liste
|
||||||
|
|
||||||
|
def __init__(self): # Wird beim Erstellen einer neuen Liste automatisch ausgeführt
|
||||||
|
self.head = None
|
||||||
|
# head zeigt auf den ersten Knoten; None bedeutet, dass die Liste leer ist
|
||||||
|
|
||||||
|
|
||||||
|
def append(self, daten): # Fügt einen neuen Knoten am Ende der Liste ein
|
||||||
|
neuer_Knoten = Knoten(daten) # Erstellt einen neuen Knoten mit dem Wert daten
|
||||||
|
|
||||||
|
if self.head is None: # Prüft, ob die Liste leer ist
|
||||||
|
self.head = neuer_Knoten # Der neue Knoten wird zum ersten Knoten
|
||||||
|
|
||||||
|
else: # Wird ausgeführt, wenn die Liste nicht leer ist
|
||||||
|
letzter_Knoten = self.head # Startet beim ersten Knoten
|
||||||
|
|
||||||
|
while letzter_Knoten.nachfolger is not None: # Geht weiter, solange es einen nächsten Knoten gibt
|
||||||
|
letzter_Knoten = letzter_Knoten.nachfolger # Geht zum nächsten Knoten
|
||||||
|
|
||||||
|
letzter_Knoten.nachfolger = neuer_Knoten # Hängt den neuen Knoten am Ende an
|
||||||
|
|
||||||
|
|
||||||
|
def ausgebenListe(self): # Gibt alle Werte der Liste aus
|
||||||
|
|
||||||
|
aktueller_knoten = self.head # Startet beim ersten Knoten
|
||||||
|
|
||||||
|
while aktueller_knoten is not None: # Wiederholt sich, solange ein Knoten vorhanden ist
|
||||||
|
|
||||||
|
print(aktueller_knoten.daten) # Gibt die Daten des aktuellen Knotens aus
|
||||||
|
|
||||||
|
aktueller_knoten = aktueller_knoten.nachfolger # Geht zum nächsten Knoten
|
||||||
|
|
||||||
|
|
||||||
|
def einfuegen_bei(self, index, daten): # Fügt einen neuen Knoten an einer bestimmten Position ein
|
||||||
|
|
||||||
|
neuer_Knoten = Knoten(daten) # Erstellt einen neuen Knoten mit den angegebenen Daten
|
||||||
|
|
||||||
|
if index == 0: # Prüft, ob der Knoten an der ersten Stelle eingefügt werden soll
|
||||||
|
|
||||||
|
neuer_Knoten.nachfolger = self.head # Der neue Knoten zeigt auf den bisherigen ersten Knoten
|
||||||
|
|
||||||
|
self.head = neuer_Knoten # Der neue Knoten wird zum ersten Knoten
|
||||||
|
|
||||||
|
return # Beendet die Methode
|
||||||
|
|
||||||
|
aktueller_knoten = self.head # Startet beim ersten Knoten
|
||||||
|
zaehler = 0 # Setzt den Zähler auf 0
|
||||||
|
|
||||||
|
while aktueller_knoten is not None and zaehler < index - 1: # Sucht den Knoten vor der gewünschten Position
|
||||||
|
aktueller_knoten = aktueller_knoten.nachfolger # Geht zum nächsten Knoten
|
||||||
|
zaehler += 1 # Erhöht den Zähler um 1
|
||||||
|
|
||||||
|
if aktueller_knoten is None: # Prüft, ob der gewünschte Index nicht existiert
|
||||||
|
print("index out of range") # Gibt eine Fehlermeldung aus
|
||||||
|
return # Beendet die Methode
|
||||||
|
|
||||||
|
neuer_Knoten.nachfolger = aktueller_knoten.nachfolger # Der neue Knoten zeigt auf den nächsten Knoten
|
||||||
|
aktueller_knoten.nachfolger = neuer_Knoten # Der vorherige Knoten zeigt jetzt auf den neuen Knoten
|
||||||
|
|
||||||
|
|
||||||
|
def loeschen(self, suchwert): # Sucht nach einem Wert und löscht das erste Vorkommen
|
||||||
|
|
||||||
|
aktueller_knoten = self.head # Startet beim ersten Knoten
|
||||||
|
vorheriger_knoten = None # Speichert den vorherigen Knoten
|
||||||
|
|
||||||
|
if aktueller_knoten is None: # Prüft, ob die Liste leer ist
|
||||||
|
print("Liste ist leer löschen nicht möglich") # Gibt eine Fehlermeldung aus
|
||||||
|
return # Beendet die Methode
|
||||||
|
|
||||||
|
if aktueller_knoten.daten == suchwert: # Prüft, ob der erste Knoten den gesuchten Wert enthält
|
||||||
|
self.head = aktueller_knoten.nachfolger # Der nächste Knoten wird zum ersten Knoten
|
||||||
|
return # Beendet die Methode
|
||||||
|
|
||||||
|
while aktueller_knoten is not None and aktueller_knoten.daten != suchwert: # Sucht nach dem Wert
|
||||||
|
vorheriger_knoten = aktueller_knoten # Speichert den aktuellen Knoten als vorherigen Knoten
|
||||||
|
aktueller_knoten = aktueller_knoten.nachfolger # Geht zum nächsten Knoten
|
||||||
|
|
||||||
|
if aktueller_knoten is None: # Prüft, ob der Wert nicht gefunden wurde
|
||||||
|
print(f"Wert {suchwert} wurde nicht gefunden") # Gibt eine Fehlermeldung aus
|
||||||
|
return # Beendet die Methode
|
||||||
|
|
||||||
|
vorheriger_knoten.nachfolger = aktueller_knoten.nachfolger # Überspringt den zu löschenden Knoten
|
||||||
|
|
||||||
|
|
||||||
|
def loeschen_anStelle(self, index): # Löscht einen Knoten anhand seiner Position
|
||||||
|
|
||||||
|
if self.head is None: # Prüft, ob die Liste leer ist
|
||||||
|
print("Liste ist leer") # Gibt eine Meldung aus
|
||||||
|
return # Beendet die Methode
|
||||||
|
|
||||||
|
if index == 0: # Prüft, ob der erste Knoten gelöscht werden soll
|
||||||
|
self.head = self.head.nachfolger # Der zweite Knoten wird zum ersten Knoten
|
||||||
|
return # Beendet die Methode
|
||||||
|
|
||||||
|
aktueller_knoten = self.head # Startet beim ersten Knoten
|
||||||
|
|
||||||
|
for i in range(index - 1): # Geht bis zum Knoten vor dem zu löschenden Knoten
|
||||||
|
if aktueller_knoten.nachfolger is None: # Prüft, ob kein weiterer Knoten vorhanden ist
|
||||||
|
print(f"Index {index} existiert nicht") # Gibt eine Fehlermeldung aus
|
||||||
|
return # Beendet die Methode
|
||||||
|
|
||||||
|
aktueller_knoten = aktueller_knoten.nachfolger # Geht zum nächsten Knoten
|
||||||
|
|
||||||
|
if aktueller_knoten.nachfolger is None: # Prüft, ob der gewünschte Knoten nicht existiert
|
||||||
|
print("Existiert nicht") # Gibt eine Fehlermeldung aus
|
||||||
|
return # Beendet die Methode
|
||||||
|
|
||||||
|
aktueller_knoten.nachfolger = aktueller_knoten.nachfolger.nachfolger # Überspringt den zu löschenden Knoten
|
||||||
Reference in New Issue
Block a user