Theorie Icon

Lernziele
Sie können...
  • einfache dynamische Datenstrukturen objektorientiert implementieren.
  • Methoden für einfach verkettete und doppelt verkettet Listen implementieren.
Einen Überblick über die Methoden einer Liste ist hier zu finden: Methoden auf Listen

Aufgabe 1 - die einfach verkettete Liste

Liste

Aufgabe Icon

A1a: Dynamische Datenstrukturen - Die einfach verkettete Liste

Implementiere eine dynamische Liste. Diese soll eine Funktion zum Hinzufügen von Listenelementen bieten. Listenelemente beinhalten einen Wert (Attribut value) und eine Referenz auf das nachfolgende Listenelement (Attribut nextElement).

  1. Implementiere die Klasse ListElement. Als Attribut bekommt diese eine value und eine Referenz auf das nächste Element der Liste nextElement.
  2. Implementiere die Klasse Liste. Diese hat ein Attribut root. Dieses ist das Wurzelelement an der die Liste startet.
  3. Füge der Klasse Liste eine Hilfsmethode _findLastElement(self, element) hinzu, die das letzte Element der Liste zurückgibt.
  4. Füge der Klasse Liste eine Methode append(self, element) hinzu, die ein Element an das Ende der Liste hinzufügt. Du kannst hier auf die Hilfsmethode _findLastElement zurückgreifen.
  5. Erzeuge eine neue Liste und füge dieser 4 Elemente mit den Werten 6, 66, 77 und 9 hinzu. Lasse dir die Liste ausgeben.
  6. Überschreibe die magische Funktion __str__ und lasse die Liste im Pythonstil [6,66,77,9] ausgeben.

Aufgabe Icon

A1b: Dynamische Datenstrukturen - Funktionen auf einer einfach verketteten Liste
  1. Implementiere eine Funktion mult_iterativ(liste), die eine Liste übergeben bekommt und das Produkt (Multiplikation) aller Elemente der Liste zurückliefert. Diese Funktion soll rein iterativ implementiert werden.
  2. Implementiere eine Funktion mult_rekursiv(liste), die eine Liste übergeben bekommt und das Produkt (Multiplikation) aller Elemente der Liste zurückliefert. Diese Funktion soll eine Hilfsfunktion _mult_rekursiv(listenElement) aufrufen, welche die Berechnung des Produktes rekursiv löst.

Aufgabe Icon

A1c: Dynamische Datenstrukturen - Beispiele für Rekursive und Iterative Lösungsansätze
Zur Übung können folgende Ideen als Methoden der Liste oder als Funktionen rekursiv oder iterativ implementiert werden. Dabei können Methoden und Funktionen auch kombiniert werden.
  • Eine Methode deleteElement(index), die ein Element an der Stelle index der Liste löscht.
  • Eine Methode, die alle Elemente mit einem bestimmten Value als Python-Liste zurückliefert.
  • Eine Methode, die alle Elemente mit einem bestimmten Value aus der Liste löscht.
  • Eine Methode, die das Value jedes Elements der Liste mit der Position in der Liste multipliziert.

Aufgabe 2 - die doppelt verkettete Liste

Diese Aufgabe ist für SE-GY in der ersten Woche zu bearbeiten. Für alle anderen ist diese erst in der zweiten Woche der Dynamischen Datenstrukturen zu bearbeiten.
DoppeltListe

Eine einfach-verkettete Liste besteht aus einer Klasse Liste, die eine Referenz auf das erste Listenelement enthält. Listenelemente haben eine Wert und eine Referenz auf ihr Nachfolgeelement.

Um die Liste und die Navigation innerhalb der Liste flexibler zu gestalten, wird die einfach-verkettete Liste in eine doppelt-verkettete Liste umgewandelt. Dazu soll jedes Element in der Liste nicht nur die Referenz auf das Nachfolgeelement beinhalten, sondern auch auf das Vorgängerelement.

Aufgabe Icon

A2: Dynamische Datenstrukturen - Die doppelt verkettete Liste
  1. Passe den Programmcode aus Aufgabe 1 so an, dass die Liste die geforderte Funktionalität aufweist.
  2. Implementiere innerhalb der doppeltverketteten Liste eine Funktion beforeLastElement(element), die ein übergebenes Element an die vorletzte Stelle der Liste einfügt
  3. Implementieren Sie außerhalb der doppeltverketteten Liste eine Funktion findFirstElement(lastElement), die ein beliebiges Element der Liste übergeben bekommt und dann das erste Element der Liste ermittelt und zurückliefert. Gebe dazu eine iterative Lösung an.
  4. Geben Sie zu der Funktion findFirstElement(lastElement) eine rekursive Lösung an.