P
struct Node {
int data;
char *name; // Name dieses Nodes
char *Data; // Daten des Nodes
// ...
int count; // Anzahl der Children die von diesem Node aus definiert sind
Node** children;
}
MaSTaH will mit malloc einen Vektor von Pointer mit Count Elementen erzeugen, in jedem Element dieses Vektores wird der Platz für einen Node allokiert, un dies so lange bis der ganze Baum gebildet ist.
Da du Memory Allokieren must (und auch wieder freigeben), spricht man von dynmaischer Speicher-verwaltung.
[Ab hier editiert]
<root>
<name>Peter</name>
<passwort>geheim</passwort>
<beschreibung>
<kurz>peter ist nicht groß</kurz>
<lang>blablablablablablablablabla</lang
</beschreibung>
<alter>10</alter>
</root>
Bildlich sähe so etwas wie folgt aus, die reale Implementierung muß aber besser gelöst werden.
struct Node *BaseNode;
if (0==(BaseNode=calloc(sizeof(struct Node),1)){ // Errorhandling}
if (0==(BaseNode.name=calloc(sizeof(char),5)){ // Errorhandling}
strcpy(BaseNode.name,"root");
if (0==(BaseNode.Data=calloc(sizeof(char),1)){ // Errorhandling}
strcpy(BaseNode.Data,"");
BaseNode.count=4; // 4 Children name,passwort,beschreibung,alter
if (0==(BaseNode.children=calloc(sizeof(struct Node),BaseNode.count)){ // Errorhandling}
if (0==(BaseNode.children[0].name=calloc(sizeof(char),5)){ // Errorhandling}
strcpy(BaseNode.children[0].name,"name");
if (0==(BaseNode.children[0].Data=calloc(sizeof(char),6)){ // Errorhandling}
strcpy(BaseNode.children[0].Data,"Peter");
BaseNode.children[0].count=0; // no children
.....
if (0==(BaseNode.children[2].name=calloc(sizeof(char),13)){ // Errorhandling}
strcpy(BaseNode.children[2].name,"Beschreibung");
if (0==(BaseNode.children[2].Data=calloc(sizeof(char),1)){ // Errorhandling}
strcpy(BaseNode.children[2].Data,"");
BaseNode.children[2].count=2; // 2 Children kurz,lang
if (0==(BaseNode.children[2].children=calloc(sizeof(struct Node),BaseNode.count)){ // Errorhandling}
if (0==(BaseNode.children[2].children[0].name=calloc(sizeof(char),5)){ // Errorhandling}
strcpy(BaseNode.children[2].children[0].name,"kurz");
if (0==(BaseNode.children[2].children[0].Data=calloc(sizeof(char),strlen("peter ist nicht groß")+1)){ // Errorhandling}
strcpy(BaseNode.children[2].children[0].Data,"peter ist nicht groß");
BaseNode.children[2].children[0].count=0; // no children
....
....