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