Mehrdimensionaler Array



  • Hallo,

    ich bin noch recht unerfahren im Umgang mit C++, vor allem was speicherverwaltung angeht (pinter etc).

    Ich möchte nun eine Datenstruktur speichern, die man sich wie ein Baumdiagramm vorstellen kann:
    Jede "Ebene" hat einen Wert (bestehend aus 4 Ziffern) und bis zu 13 Abgehende "Äste", die wiederrum auf einen genauso aufgebauten Datensatz zeigen.
    Außerdem ist nicht von vornerein bekannt, wie viele ebenen gebraucht werden, der speicher müsste also wärend des laufens neu reserviert werden.

    Ich hatte etwas ähnliches einmal in PHP gemacht, da war das ganze kein problem da ein array dort mehrere datentypen speichern kann - ich hatte dann je im [0] element den Wert, und in den elementen [1] - [13] die unterarrays gespeichert:

    Array{
    [0] - (1,2,3,4)
    [1] - Array{
    	[0] - (2,5,6,7)
    	[1] - Array{
    		[0] - (3,4,5,6)
    		}
    	[2] - Array{
    		[0] - {2456}
    		}
    	}
    [2] - Array{
    	...
    	}
    }
    

    in C++ is das leider nicht so einfach, muss aber irgendwie machbar sein.
    Ich wär dankbar für jede Hilfe,

    MfG, TheAngel



  • Hallo,

    Vielleicht schaust du mal in irgend eine Dokumentation. Z.b. in dieses Skript einer Vorlesung über Programieren. Aber vorher lieber mal in ein Tutorial zu C++

    Ein bischen mehr eigeninitiative, bitte. 👎



  • Vielleicht sowas in der art:

    struct node
    {
       int value; 
       std::vector<node*> children; //deine aeste
    }
    

    Deine Aeste kannst du dann jeweils in den Vektor packen.

    Wenn du noch die Ebene daruber brauchst:

    std::vector<node*> rootList //also deine ausseres array
    

    Ich hoffe, es ist klar geworden.



  • Zur Erklärung der Nachricht über mir:

    Pointer sind Variablen, die auf ein Element eines Datentyps zeigen (sie enthalten die Adresse des angezeigten Elements).

    Strukturen sind Definitionen, mit denen du eigene Datentypen erstellen kannst.

    Vektoren sind "Behältnisse" (Container), in denen du eine beliebige Menge von Elementen eines Datentyps ablegen kannst, ohne dich selbst um die Anforderung und Freigabe von Speicher kümmern zu müssen.

    Kurz:

    Die Beschreibung der o.g. Struktur enthält einen Zeiger auf ein Element des gleichen Typs. Wenn du nun also eine Instanz der Struktur anlegst, und in dem Zeiger die Adresse einer anderen Instanz der Struktur speicherst, kannst du dich von einem Element zum nächsten "durchhangeln".

    Klassischer Einsatz einer derartigen Struktur sind verkettete Listen (a zeigt auf b, b zeigt auf c, c zeigt auf d, ...) und Bäume (a zeigt auf b und c, d zeigt auf e und f, c zeigt auf g und h ...).

    Durch den Einsatz eines Vektors ist es möglich, beliebig viele "Unterelemente" zu erzeugen - das, was du offensichtlich willst.

    Allerdings: Wenn du nur Zeiger "in einer Richtung" hast, kannst du auch nur in einer Richtung durch die Struktur laufen.

    Und, GANZ wichtig: In diesem Fall immer einen Zeiger auf das erste ("oberste") Element behalten (auch "Anker" genannt). Wenn du diesen Zeiger nicht hast, kommst du nie wieder an die Struktur - und dann kannst du sie auch nicht löschen.

    Gruss
    Sid


Log in to reply