MINT lernen

Die dynamische Reihung

Eine Warteliste, deren Länge vorher niemand kennt: Die dynamische Reihung wächst und schrumpft mit.

1

Warum eine dynamische Reihung?

Eine statische Reihung wird mit fester Länge erzeugt. Bei einer Anmeldeliste, einer Playlist oder einem Warenkorb weiß man aber vorher nicht, wie viele Einträge kommen.

  • Statische Reihung:Länge beim Erzeugen fest, z. B. new String[5] — ist sie voll, passt nichts mehr hinein.
  • Einfügen dort:Platz in der Mitte schafft man nur, indem man selbst alle folgenden Werte verschiebt.
  • Dynamische Reihung:Klasse DynArray — jede Operation lässt die Reihung wachsen oder schrumpfen.
  • Index:Die Elemente stehen lückenlos an den Positionen \(0,\,1,\,\dots,\,n-1\); dabei ist \(n\) die aktuelle Länge.
2

Die Operationen der dynamischen Reihung

Im Abitur sind genau diese Operationen vorgegeben. Mehr braucht man nicht — alles Weitere baut man daraus.

  • Inhaltstyp:steht in spitzen Klammern: DynArray<String> speichert Texte, DynArray<Integer> ganze Zahlen.
  • DynArray()erzeugt eine leere dynamische Reihung.
  • append(x)hängt x hinten an.
  • insertAt(i, x)fügt x an Index i ein — das bisherige Element dort und alle folgenden rücken nach hinten.
  • setItem(i, x)ersetzt den Inhalt an Index i durch x — die Länge bleibt gleich.
  • delete(i)entfernt das Element an Index i — alle folgenden rücken nach vorn.
  • getItem(i)liefert den Inhalt an Index i, ohne etwas zu ändern.
  • getLength()liefert die Anzahl der Elemente.
  • isEmpty()liefert true, wenn die Reihung leer ist.
DynArray<String> warteliste = new DynArray<String>();
warteliste.append("Ali");        // [Ali]
warteliste.append("Ben");        // [Ali, Ben]
warteliste.insertAt(0, "Cem");   // [Cem, Ali, Ben]
warteliste.delete(1);            // [Cem, Ben]
String erster = warteliste.getItem(0);   // "Cem"

Wähle oben ein Ziel und baue die Zielreihung mit den Operationen nach. Den Index wählst du durch Klick auf ein Feld oder mit dem Regler. Achte darauf, was mit den Indizes der anderen Elemente passiert.

DynArray-Werkbank

getLength() = 0

Halte fest: Beim Einfügen und Löschen rücken alle folgenden Elemente um eine Stelle — ihre Indizes ändern sich. setItem ersetzt dagegen nur und verschiebt nichts.

Merke

Gültige Indizes: \(0 \le i \le \texttt{getLength()}-1\)

3

Allgemeine Hinweise

Das letzte Element

Es steht an Index getLength() - 1, nicht an getLength(). Ein Zugriff außerhalb von 0 bis getLength() - 1 führt zu einem Laufzeitfehler.

Indizes wandern

Nach insertAt oder delete steht an einem Index plötzlich ein anderes Element. Wer sich einen Index gemerkt hat, muss ihn anpassen.

Ersetzen oder einfügen?

setItem überschreibt — die Länge bleibt. insertAt schiebt ein — die Länge wächst um 1. Im Zweifel die Reihung vorher und nachher aufschreiben.

Videos