Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
faecher:informatik:oberstufe:adt:verkettete_liste:start [28.06.2021 16:24] – sbel | faecher:informatik:oberstufe:adt:verkettete_liste:start [19.10.2021 16:32] (aktuell) – sbel | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== Verkettete Listen ====== | ====== Verkettete Listen ====== | ||
+ | |||
+ | Hier geht es zunächst um eine lineare abstrakte Datenstruktur: | ||
* [[.memory: | * [[.memory: | ||
- | + | | |
- | + | * [[.liste_java:start|Eine verkettete Liste mit Java]] | |
- | ===== Arrays und Listen ===== | + | * [[.benchmarking: |
- | + | ||
- | Wenn du mehrere gleichartige Objekte speichern möchtest, hast du im wesentlichen zwei Möglichkeiten: | + | |
- | + | ||
- | ===== Arrays ===== | + | |
- | + | ||
- | Bei eineM Array legst du bereits zum Zeitpunkt der Deklaration fest, wieviele Elemente es enthalten soll: | + | |
- | + | ||
- | <code java> | + | |
- | int[] zahlenarray = new int[5]; | + | |
- | </ | + | |
- | + | ||
- | Damit verbunden, ist die Anforderung eines bestimmten Speicherbereichs. | + | |
- | + | ||
- | {{ :faecher:informatik: | + | |
- | + | ||
- | Eine spätere Erweiterung ist nicht vorgesehen - möglicherweise sind die Speicherbereiche vor und nach dem für das Array reservierten Speicher bereits anderweitig vergeben? | + | |
- | + | ||
- | Denk an eine Reservierung im Kino: Wenn du 3 Plätze nebeneinander reserviert hast und kurz vor der Vorstellung nochmal zwei weitere Plätze direkt im Anschluss haben möchtest, klappt das meist nicht. Du musst in diesem Fall einen neuen Bereich suchen, der genügend Sitzplätze für alle deine Freunde hat und alle Plätze dorthin verschieben. | + | |
- | + | ||
- | ===== Verkettete | + | |
- | + | ||
- | Bei der Speicherung als **verkettet Liste** können sich die Objekte überall im Hauptspeicher befinden, man kann jederzeit ein neues Element anfügen - wie geht denn das? | + | |
- | + | ||
- | {{ :faecher: | + | |
- | + | ||
- | Eine verkettete Liste funktioniert ein wenig wie eine Schnitzeljagd. Jedes Element enthält die zu speichernde Information (" | + | |
---- | ---- | ||
- | {{: | + | Die Inhalte des Namensraums '' |
- | === (A1) === | + | |
- | + | ||
- | * Schreibe die Zahlenreihe aus dem Beispiel | + | |
- | * Welche Nachteile gegenüber einem Array erkennst du? | + | |
- | + | ||
- | ===== Operationen ===== | + | |
- | + | ||
- | Was wollen wir auf unseren Datenstrukturen (Array/ | + | |
- | + | ||
- | * Lesen | + | |
- | * Einfügen (Am Ende/ | + | |
- | * Löschen | + | |
- | + | ||
- | ==== Aufwandsabschätzung: | + | |
- | + | ||
- | Der Aufwand für die Operationen ist folgender: | + | |
- | + | ||
- | ^ ^ Array ^ Liste ^ | + | |
- | |Lesen | O(1) | O(n) | | + | |
- | |Einfügen | O(n) | O(1) | | + | |
- | |Löschen | O(n) | O(1) | | + | |
- | + | ||
- | Zur Erinnerung: //O(1)// ist eine //konstante Laufzeit//, es hängt also nicht davon ab, wie lang die Liste ist oder wie viele Elemente das Array hat. | + | |
- | + | ||
- | //O(n)// bedeutet //lineare Laufzeit//, d.h. die Operation dauert linear länger mit der Zahl der Elemente deiner Datenstruktur. | + | |
- | + | ||
- | ---- | + | |
- | {{: | + | |
- | === (A2) === | + | |
- | + | ||
- | Erkläre die unterschiedlichen Laufzeiten bei den verschiedenen Datenstrukturen. Überlege dir dazu, was man Schritt für Schritt tun muss, um z.B. ein Element in der Mitte einer Liste zu entfernen und was man machen muss, um das bei einem Array zu tun. Tipp: Das Array darf nach dem Vorgang keine " | + | |
+ | [[https:// |