Tutorial
Baumstrukturen in FreeBASIC
von ThePuppetMaster | Seite 3 von 7 |
Nun aber zum eigentlichen Tree (Baum).
Zuerst einmal benötigen wir einen passenden UDT, mit dessen Hilfe wir ein Element darstellen können, das Pointer für die Linked List und die eigentlichen Nutzdaten enthält. Dieser UDT beinhaltet in unserem Fall (da wir flexibel bleiben möchten) nur 3 Variablen für Nutzdaten:
- V_Type: UInteger Wert annehmen kann
- V_Data: Pointer auf den eigentlichen Nutzdatenspeicher
- V_Size: Anzahl der Bytes im Datenspeicher (Länge des Bereichs, auf den der Pointer verweist)
Damit dieses Element auch weiß, welches Element sein Elternelement (Parent) darstellt (vergleichbar mit: "C:\bla\" wäre das Elternelement von "C:\bla\foo\"), wird ein Pointer hinzugefügt, der auf dieses vorhergende Elternelement zeigt. Das Element kann natürlich auch "Kinderelemente" bzw. Ableger (Child-Elemente) haben. Das ist vergleichbar mit einem Ordner "C:\Testordner" (Child) auf der Festplatte C:\ (Parent). Damit man von jedem Element aus z.B. dem "Unterordner_3" von "C:\bla\foo\Unterordner_3\" auch auf "C:\" zurück kommen kann, ohne dass man sich über die Parents hangeln muss (vom Ursprung die Baumverzweigungen nach "oben" hin durchlaufen), wird ein "Root"-Element hinzugefügt, das auf das ursprünglich erste Element zeigt.
'Einen Type definieren, der gleichzeitig alle nötigen Informationen speichern kann
Type Element_Type
'Einige Pointer für die mehrdimensionale Liste (zum Navigieren)
V_Next as Element_Type Ptr 'Pointer zum nächsten Element in derselben Ebene (z.B. von <head> nach <body>)
V_Prev as Element_Type Ptr 'Pointer zum vorherigen Element in derselben Ebene (z.B. von <body> nach <head>)
V_ChildF as Element_Type Ptr 'Pointer zum ersten tieferen Element (z.B. von <html> auf <head>)
V_ChildL as Element_Type Ptr 'Pointer zum letzten tieferen Element (z.B. von <html> auf <head>)
V_Parent as Element_Type Ptr 'Pointer zum höheren Element (z.B. von <head> nach <body>)
V_Root as Element_Type Ptr 'Pointer zum höchsten Element (z.B. von <br> nach <html>) (Immer zum ersten Element)
'Informationen der eigentlichen Nutzdaten
V_Type as UInteger 'Eine eindeutige Nummer, die die gespeicherte UDT-Variable identifiziert
V_Size as UInteger 'Die Anzahl Bytes in V_Data
V_Data as Any Ptr 'Ein Pointer auf die eigentlichen Daten des gespeicherten UDTs
End Type
Diese Struktur ist im Grunde nur ein Element, das Informationen in Form eines UDTs für eine Linked List beinhaltet.
Die Variablen im UDT sind größtenteils nur Pointer auf andere Elemente einer Linked List: Darunter die beiden Pointer V_ChildF und V_ChildL, welche zusammen eine eigenständige Linked List darstellen. Diese Liste speichert die "Kinder" (Child) des Elements. Damit eine unbekannte Anzahl an Kindern gespeichert werden kann, ist dies kein Array, sondern eben auch eine Linked List.
Root ist dementsprechend "Adam und Eva", das Element, von dem aus alle anderen Elemente in diesem Baum ausgehen.
V_Next und V_Prev sind die Nachbarn dieses Elementes. V_Next entsprechend der nächste Nachbar in einer Strasse und V_Prev der vorherige Nachbar.
Zusätzliche Informationen und Funktionen | |||||||
---|---|---|---|---|---|---|---|
|
|