Buchempfehlung
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Umfassend, aber leicht verständlich führt dieses Buch in die Programmierung von ATMEL AVR Mikrocontrollern ein. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Tutorial

Baumstrukturen in FreeBASIC

von MitgliedThePuppetMasterSeite 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:

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.





 

Gehe zu Seite Gehe zu Seite  1  2  3  4  5  6  7  
Zusätzliche Informationen und Funktionen
  Bearbeiten Bearbeiten  

  Versionen Versionen