Array von Strukturen



  • Hallo Leute,
    ich hab ein reines C-Programm und brauche darin ein Array, deren Einträge jeweils der Startknoten einer verketteten Liste sein sollen. Also genauer:
    ich habe einen Datentyp verkettete Liste:

    struct liste
    {
    int knoten;
    struct liste *next;
    };
    

    Nun benötige ich mehrere solche linearen Listen und deshalb möchte ich ein Array, so dass ich beispielsweise mittels

    array[0]
    

    auf einen Startknoten einer verketteten Liste zugreifen kann, mittels

    array[1]
    

    auf den einen zweiten Startknoten usw..

    Das Problem ist jedoch, dass ich die Anzahl der verketteten Listen die ich benötige beim Programmstart noch nicht weiß, also erst ein Array dynamisch erzeugen muss (mit malloc).
    Mein Hauptproblem ist die Festlegung des Datentyp des Arrays und die dynamische Reservierung des Speichers.

    Wäre euch für Weiterhilfe echt dankbar,
    ciao, sunny.



  • struct liste* array = malloc(N * sizeof(struct liste));
    


  • Danke für die schnelle Antwort Bashar.
    Is mir aber dennoch nicht ganz klar. Du meinst also: am Beginn der Funktion wo ich das Array benötige, dieses mit

    struct liste *array;
    

    deklarieren. Dann mit

    array = malloc(N * sizeof(struct liste));
    

    entsprechend Speicherplatz reservieren?? Aber wie kann ich zum Beispiel auf den ersten Startknoten zugreifen? Mittels

    array[0]->knoten;
    

    ??? Gerade so funktioniert es nämlich bei mir nicht. 😕
    Danke schon mal für eine Antwort,
    sunny.



  • array[0].knoten = 0;
    array[0].next = malloc(sizeof(struct liste));
    


  • Danke dir, scheint irgendwie zu funktionieren... 🙂
    Wieso funktioniert denn der

    ->
    

    Operator eigentlich hier nicht?



  • sunnyberny schrieb:

    Danke dir, scheint irgendwie zu funktionieren... 🙂
    Wieso funktioniert denn der

    ->
    

    Operator eigentlich hier nicht?

    Weil sich in den Elementen des Arrays die Strukturen selbst befinden und nicht Zeiger auf Strukturen. Der -> operator würde z.B. hier funktionieren:

    struct liste** array = malloc(N * sizeof(struct liste*));
    // 1. Listenelement anlegen
    array[0] = malloc(sizeof(struct liste));
    array[0]->knoten = 0;
    array[0]->next = malloc(sizeof(struct liste));
    


  • Das klingt verdammt logisch... 😉
    Danke euch,
    Gruß sunny



  • sunnyberny schrieb:

    Danke dir, scheint irgendwie zu funktionieren... 🙂
    Wieso funktioniert denn der

    ->
    

    Operator eigentlich hier nicht?

    für's erste element schon:

    array->knoten = irgendwas;
    

    ach... für weitere auch

    (&array[1])->knoten = nochwas;
    

    sieht aber schön blöd aus



  • net schrieb:

    (&array[1])->knoten = nochwas;
    

    Stimmt, so siehts besser aus ;):

    (array+1)->knoten ...
    

Anmelden zum Antworten