Datenstrukturen und Algorithmen

Welche Aussage beschreibt eine verkettete Liste (eine Liste, in der jedes Element einen Zeiger auf das nächste Element enthält) im Vergleich zu einem Array richtig?

  1. AIst das Element direkt vor der Einfügestelle bekannt, lässt sich ein neues Element allein durch Umsetzen von Zeigern einfügen, ohne andere Elemente zu verschieben; um das i-te Element zu lesen, muss die Liste aber von vorn durchlaufen werden
  2. BDie Position des i-ten Elements lässt sich berechnen, daher kann jedes Element in konstanter Zeit O(1) gelesen werden
  3. CDie Elemente liegen lückenlos hintereinander im Speicher, daher wirken Cache und Prefetching beim sequenziellen Lesen gut
Antwort und Erläuterung anzeigen

Antwort: A. Ist das Element direkt vor der Einfügestelle bekannt, lässt sich ein neues Element allein durch Umsetzen von Zeigern einfügen, ohne andere Elemente zu verschieben; um das i-te Element zu lesen, muss die Liste aber von vorn durchlaufen werden

In einer verketteten Liste genügt es zum Einfügen und Löschen an einer bekannten Stelle, die benachbarten Zeiger umzuschreiben; das kostet O(1). Um das i-te Element zu lesen, muss man dagegen von vorn i Zeigern folgen, was O(n) dauert. Ein Array berechnet die Adresse des i-ten Elements aus der Startadresse und der Elementgröße und liest jedes Element in O(1); das Einfügen in der Mitte kostet aber O(n), weil die nachfolgenden Elemente verschoben werden müssen. Da die Elemente eines Arrays zusammenhängend liegen, wirken außerdem Cache und Prefetching gut, während die Knoten einer verketteten Liste oft im Speicher verstreut sind; selbst ein Durchlauf mit gleichem O(n) kann dann deutlich langsamer sein.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Datenstrukturen und Algorithmen

  1. Auf einem leeren Stack werden nacheinander die Operationen push 1, push 2, pop, push 3, push 4, pop, pop ausgeführt. In welcher Reihenfolge werden die Werte durch pop entnommen?
  2. In eine leere Warteschlange (Queue) werden die Elemente A, B und C in dieser Reihenfolge eingefügt. Dann wird ein Element entnommen, D eingefügt und ein Element entnommen, E eingefügt und ein Element entnommen. In welcher Reihenfolge werden die Elemente entnommen?
  3. Der Ausdruck „3 4 + 2 * 5 −“ in umgekehrter polnischer Notation (Postfixnotation) wird ausgewertet, indem jede Zahl auf einen Stack gelegt wird und bei jedem Operator zwei Werte entnommen, verrechnet und das Ergebnis wieder abgelegt wird. Welches Ergebnis entsteht? Der linke Operand eines Operators ist der Wert, der früher abgelegt wurde.
  4. Welche Aussage beschreibt eine Kollision in einer Hashtabelle richtig?
  5. In einer Hashtabelle der Größe 7 (Positionen 0 bis 6) werden mit der Hashfunktion h(k) = k mod 7 die Schlüssel 10, 17, 24 und 3 in dieser Reihenfolge gespeichert. Kollisionen werden durch lineares Sondieren aufgelöst, das jeweils eine Position weiterrückt (nach 6 folgt 0), bis ein freier Platz gefunden ist. An welcher Position wird der Schlüssel 3 gespeichert?