Logische Datenstrukturen • Lineare Listen • Stapel, Warteschlangen • Binärbäume Datenorganisation 2006 Logische Datenstrukturen Seite 1 Klöditz Hochschule Anhalt (FH) Lineare Liste Begriffe first key next key content next key content next key content next key content NULL • Funktion: content – sequentielle Verkettung von Datensätzen – Ordnungsprinzip: Schlüssel • Begriffe: – – – – – first key next content NULL - Klöditz Hochschule Anhalt (FH) Anker, Wurzel; Adresse des logischen Listenanfangs Schlüssel; Ordnungskriterium Adresse des logischen Nachfolgers Datensatz-Inhalt leere Adresse; logisches Ende der Liste Datenorganisation 2006 Logische Datenstrukturen Seite 2 Lineare Liste Beispiel *Biber Biber *Dachs content Dachs *Eule Eule content *Maus Maus *Uhu Uhu content NULL content content Datenorganisation 2006 Logische Datenstrukturen Seite 3 Klöditz Hochschule Anhalt (FH) Operationen in linearen Listen Einfügen am Anfang Adler *Biber content *Adler Biber *Dachs Dachs content *Eule Eule content *Maus Maus content *Uhu Uhu content NULL content Klöditz Hochschule Anhalt (FH) Datenorganisation 2006 Logische Datenstrukturen Seite 4 Operationen in linearen Listen Einfügen am Anfang • Algorithmus: – Speichern des neuen Listenelementes auf beliebigen freien Speicherplatz – Adresse der bisherigen Wurzel in next des neuen Listenelementes eintragen – Adresse des neuen Listenelementes in first eintragen Datenorganisation 2006 Logische Datenstrukturen Seite 5 Klöditz Hochschule Anhalt (FH) Operationen in linearen Listen Einfügen innerhalb der Liste Adler *Biber Katze content *Maus content *Adler Biber *Dachs Dachs content *Eule Eule content *Katze Maus content *Uhu Uhu content NULL content Klöditz Hochschule Anhalt (FH) Datenorganisation 2006 Logische Datenstrukturen Seite 6 Operationen in linearen Listen Einfügen innerhalb der Liste • Algorithmus: – Speicherung des neuen Elementes auf beliebigen freien Speicherplatz – Suchen der Einfügestelle (sequentielles Durchlaufen der Liste) – Adresse des logischen Nachfolgers aus next des logischen Vorgängers in next des neuen Elementes eintragen – Adresse des neuen Elementes in next des logischen Vorgängers eintragen Datenorganisation 2006 Logische Datenstrukturen Seite 7 Klöditz Hochschule Anhalt (FH) Operationen in linearen Listen Einfügen am Ende der Liste Adler *Biber content Katze Zebra *Maus NULL content content *Adler Biber *Dachs Dachs content *Eule Eule content *Katze Maus content *Uhu Uhu content *Zebra content Klöditz Hochschule Anhalt (FH) Datenorganisation 2006 Logische Datenstrukturen Seite 8 Operationen in linearen Listen Einfügen am Ende der Liste • Algorithmus: – Speicherung des neuen Elementes auf beliebigen freien Speicherplatz – Suchen der Einfügestelle (sequentielles Durchlaufen der Liste) – Adresse NULL aus next des logischen Vorgängers in next des neuen Elementes eintragen – Adresse des neuen Elementes in next des bisherigen logisch letzten Elementes eintragen Datenorganisation 2006 Logische Datenstrukturen Seite 9 Klöditz Hochschule Anhalt (FH) Operationen in linearen Listen Löschen eines Elementes der Liste Adler *Biber content Katze Zebra *Maus NULL content content *Adler Biber *Dachs Dachs content *Katze Eule content *Katze Maus content *Uhu Uhu content *Zebra content Klöditz Hochschule Anhalt (FH) Datenorganisation 2006 Logische Datenstrukturen Seite 10 Operationen in linearen Listen Löschen eines Elementes der Liste • Algorithmus: – Suchen des zu löschenden Elementes (sequentielles Durchlaufen der Liste) – Adresse des logischen Nachfolgers des zu löschenden Elementes aus next dieses Elementes in next des logischen Vorgängers eintragen (anstelle der Adresse des zu löschenden Elementes) – Speicherplatz des gelöschten Elementes freigeben Datenorganisation 2006 Logische Datenstrukturen Seite 11 Klöditz Hochschule Anhalt (FH) Lineare Liste Implementierung • Voraussetzung: Direktzugriffsspeicher • Notwendiger Speicherplatz: – für n Datensätze zu je m Bytes = n*m Bytes – Speicherplatz für Anker • Verwaltung des Speichers – durch Programm – durch Betriebssystem • Satzaufbau: – Schlüsselattribut – Satzinhalt / Daten – Zeiger auf logisch nächsten Datensatz Klöditz Hochschule Anhalt (FH) key content next Datenorganisation 2006 Logische Datenstrukturen Seite 12 Lineare Liste Implementierung • Probleme: – aufwändiges Durchsuchen: Rückwärtsverkettung zusätzlich, Mehrfachverkettung – Speicherverwaltung der leeren Datensätze: Bitmap (1 bit/Datensatz) oder Lineare Liste freier Datensätze (Ankeradresse + Kettung der leeren Datensätze) oder ... ? – logische Reihenfolge entspricht nicht physischer Reihenfolge: Reorganisation = Herstellen der Übereinstimmung von logischer und physischer Folge Datenorganisation 2006 Logische Datenstrukturen Seite 13 Klöditz Hochschule Anhalt (FH) Lineare Liste Mehrfach-Verkettung first key next key content next key content next key content next key content NULL NULL prev content prev prev prev last Klöditz Hochschule Anhalt (FH) Datenorganisation 2006 Logische Datenstrukturen Seite 14 Stapel LIFO: last in - first out stack end Prinzip: last in - first out (LIFO) • Synonyme: – Kellerspeicher, Stapel, stack • Operationen: – Hinzufügen eines Eintrags: – Entnehmen eines Eintrags: • Zustände des Stacks: stack[end] = new; end++; last = stack[end-1]; end--; voll; leer Datenorganisation 2006 Logische Datenstrukturen Seite 15 Klöditz Hochschule Anhalt (FH) Warteschlange FIFO: first in - first out queue front end Prinzip: first in - first out (FIFO) • Synonyme: Wartschlange, Schlange, queue • Operationen: – Hinzufügen eines Eintrags: queue[end] = new; end++; – Entnehmen eines Eintrags: old = queue[front]; front++; • Zustände der Warteschlange: voll; leer Klöditz Hochschule Anhalt (FH) Datenorganisation 2006 Logische Datenstrukturen Seite 16 Binärbäume Begriffe • Baum (tree) = endlicher, schwach zusammenhängender Graph, für dessen Knoten gilt: • genau ein Knoten hat keinen Eingang (Wurzel, root) • alle anderen Knoten haben genau einen Eingang • endlicher Graph = Menge Knoten N (nodes) + Menge Kanten E (edges) • Binärer Baum (binary tree) = geordneter Baum, der leer ist oder für dessen Knoten gilt: • außer den Endknoten haben alle Knoten genau zwei Ausgänge • maximal ein "Kind" jedes "Elternknotens" ist leer Datenorganisation 2006 Logische Datenstrukturen Seite 17 Klöditz Hochschule Anhalt (FH) Binärbäume Begriffe • Vollständiger Baum: – alle Knoten besetzt Wurzel Tiefe 0 5 Tiefe 1 Tiefe 2 3 Unterbaum 7 1 4 6 9 Blätter • Unausgeglichener Baum: 7 – ungleiche Tiefe Vorgänger Direkter Nachfolger 5 3 1 19 6 4 Brüder Klöditz Hochschule Anhalt (FH) Datenorganisation 2006 Logische Datenstrukturen Seite 18 Binärbäume Begriffe • Ausgeglichener Baum: – gleiche Tiefe oder max. eine Ebene Unterschied 7 5 19 4 6 8 2 Datenorganisation 2006 Logische Datenstrukturen Seite 19 Klöditz Hochschule Anhalt (FH) Binärer Suchbaum Erzeugen Ausgangspunkt: Liste 5 2 7 4 1 4 1 5 NULL 2 NULL 2 7 4 1 2 NULL NULL 2 7 2 Klöditz Hochschule Anhalt (FH) NULL 1 NULL NULL 5 5 NULL NULL NULL 1 NULL 7 4 1 NULL 7 4 NULL 5 NULL 5 NULL 7 4 NULL NULL NULL NULL NULL Datenorganisation 2006 Logische Datenstrukturen Seite 20 Binärer Suchbaum Hinzufügen • Ausgangspunkt: – ausgeglichener Binärbaum 7 • Hinzufügen: – 20 3 29 17 11 24 18 (in dieser Reihenfolge) 5 • Algorithmus: 19 4 6 8 20 – Durchlaufen des Baumes bis zu einem Blatt 2 – Anhängen des neuen Knotens 29 9 3 17 11 24 18 Datenorganisation 2006 Logische Datenstrukturen Seite 21 Klöditz Hochschule Anhalt (FH) Binärer Suchbaum Löschen • Löschen: – 3 20 7 (in dieser Reihenfolge) • Algorithmus: 7 – Durchlaufen des Baumes bis zum zu löschenden Knoten – Fallunterscheidung: • Endknoten • Knoten mit nur einem Nachfolger: 2 Nachfolger ersetzt den zu löschenden Knoten • Knoten mit zwei Nachfolgern: "größter" Knoten im "linken" Unterbaum bzw. "kleinster" Knoten im "rechten" Unterbaum ersetzt den zu löschenden Knoten Klöditz Hochschule Anhalt (FH) 5 4 19 6 8 20 29 9 3 17 11 24 18 Datenorganisation 2006 Logische Datenstrukturen Seite 22 Binärer Suchbaum Löschen • Ergebnis (1. Schritt): 7 7 5 4 19 6 5 8 2 4 20 29 9 3 17 19 6 8 2 29 9 24 11 24 17 18 11 18 Datenorganisation 2006 Logische Datenstrukturen Seite 23 Klöditz Hochschule Anhalt (FH) Binärer Suchbaum Löschen • Ergebnis (2. Schritt): 7 6 5 4 2 19 6 5 29 8 9 24 4 2 19 29 8 9 17 11 Klöditz Hochschule Anhalt (FH) 24 17 18 11 18 Datenorganisation 2006 Logische Datenstrukturen Seite 24 Binärer Suchbaum Durchmustern / Durchlaufen • • Durchmustern berührt alle Knoten des Baumes, Durchlaufen nur einen Teil Durchmustern in Präordnung: – Reihenfolge: Wurzel des Unterbaums Æ links Æ rechts – also: (7) (5 (4 2 _) 6) (19 (8 _ 9) _) • 7 symmetrisches Durchmustern: 5 – Reihenfolge: links Æ Wurzel Æ rechts – also: ((2 4 _) 5 6) 7 (_ 8 9) 19 _) • Durchmustern in Postordnung: – Reihenfolge: links Æ rechts Æ Wurzel – also: ((2 _ 4) 6 5) ((_ 9 8) _ 19) 7 • 4 19 6 8 2 9 Durchlaufen eines Baumes: – von der Wurzel zu einem definierten Knoten "laufen" Datenorganisation 2006 Logische Datenstrukturen Seite 25 Klöditz Hochschule Anhalt (FH) Binärer Suchbaum Suchen / Durchlaufen • Algorithmus: – Durchlaufen des Baumes bis zum gesuchten Knoten oder zu einem Blatt (bzw. "nicht gefunden") 7 • Beispiel: maxTiefe = 20 – Anzahl der Knoten eines Baumes: nB = 2(maxTiefe + 1) -1 5 4 – Durchschnittliche Anzahl der Zugriffe: vB = ( maxTiefe+1) / 2 Klöditz Hochschule Anhalt (FH) 6 8 10,5 – Anzahl der Zugriffe in einer Liste (zum Vergleich): v L = ( nL + 1 ) / 2 19 2.097.151 2 9 1.048.576 Datenorganisation 2006 Logische Datenstrukturen Seite 26 Syntaxbäume • Darstellung der Syntax arithmetischer Ausdrücke: x+y x*y + * x y x a*(b+c) y a*((b+c)*(d*e-f/g)) * a * + a b y* c + x y- b c x* xy/ d e f g Datenorganisation 2006 Logische Datenstrukturen Seite 27 Klöditz Hochschule Anhalt (FH) Binärbäume Speichern von Binärbäumen Prinzip: key Inhalt *left key *right key Inhalt *left Beispiel: Inhalt *right *left *right 7 7 Inhalt *5 5 *19 19 5 4 6 Inhalt *4 2 19 Inhalt 8 9 *6 4 *8 8 Inhalt Inhalt *2 NULL 6 NULL NULL Inhalt NULL NULL 2 Inhalt NULL Klöditz Hochschule Anhalt (FH) *9 9 Inhalt NULL NULL NULL Datenorganisation 2006 Logische Datenstrukturen Seite 28 Binärbaum Balancierte Bäume • Problem: – zufällig erzeugte Bäume können sehr unsymmetrisch sein – Suchoperationen werden dann aufwändig • Lösung: – zusätzliche Bedingungen beim Einfügen und Löschen berücksichtigen • Beispiel: – AVL-Bäume Datenorganisation 2006 Logische Datenstrukturen Seite 29 Klöditz Hochschule Anhalt (FH) Binärbaum AVL-Bäume • zurückzuführen auf Adelson-Velskij und Landis (1962) • Definition: – Für jeden Knoten p eines AVL-Baumes gilt, dass sich die Höhe des linken Teilbaumes maximal um 1 von der des rechten Teilbaumes unterscheidet. • Besonderheiten: – Suchen in AVL-Bäumen geht mit O(log N) bei N Datensätzen – Nach jedem Einfügen und Löschen muss überprüft werden, ob noch ein AVL-Baum vorliegt; sonst Wiederherstellung durch "Rotation" oder "Doppelrotation". Klöditz Hochschule Anhalt (FH) Datenorganisation 2006 Logische Datenstrukturen Seite 30