Verkettete Listen - Zeiger in Strukturen



  • Mal sehen, ob ich das verstanden habe.

    1. Mit der while Schleife und fread wird bei jedem Schleifendurchlauf eine Liste der Stuktur bzw. eine Struktur in den Arbeitsspeicher geladen
    (Zeile 17)

    2. Wenn first==NULL ist die Liste im Arbeitsspeicher leer und nicht die Liste die auf der Festplatte liegt. Es wird die erste Liste der Struktur in den Arbeitsspeicher geladen und an das Ende der Liste wieder der NULL Zeiger
    angehängt (Zeile 19-32)

    3. Wenn first!=NULL ist wird dem Zeiger lager_ptr mit lager_ptr=first die Adresse der ersten Liste übergeben (Zeile 37).

    4. Dann wird Speicher für die nächste Liste reserviert (Zeile 41).

    5. Jetzt wird dem Zeiger lager_ptr die Adresse des reservierten Speichers übergeben und die nächste Liste in den Arbeitsspeicher geladen.
    Dann wird das Ende der Liste wieder mit dem NULL-Zeiger markiert. (Zeile 49-53).

    6. Beim nächsten Durchlauf der while-Schleife würde dann die nächste Liste ausgegeben, usw.

    Stimmt das so ungefähr?

    Dank euch habe ich auch meinen Denkfehler beseitgen können:

    Ich dachte mit der Zuweisung lager_ptr=first und anschließender Zuweisung
    lager_ptr=lager_ptr->next wird immmer die selbe Liste ausgegeben.
    Aber durch die while Schleife in Zeile 39 wird die Zuweisung
    lager_ptr=lager_ptr->next nicht nur einmal ausgeführt, sondern so lange bis das aktuell letzte Element in der Liste (markiert durch den NULL-Zeiger) gefunden wurde.



  • ⚠ Begriffsverwirrung.

    Du hast nur eine Liste. Die besteht aus einzelnen Einträgen/Elementen (jeweils eine ganze struct), die miteinander durch die next-Zeiger Verknüpft sind.

    Und das einzige was da ausgegeben wird sind die Textmeldungen bei printf.

    1. Es wird der Inhalt einer struct aus der Datei in eine lokale struct (lager_daten) eingelesen. (Zeile 17)
    Wenn das fehlschlägt, geht es bei 4. weiter

    2a. Wenn die Liste noch leer ist, wird Speicher besorgt, der Inhalt von lager_daten in diesen Speicher kopiert und der next Zeiger auf NULL gesetzt.

    2b. Wenn die Liste schon einen Eintrag hat, wird das Ende der Liste gesucht (Zeile 39, 40), Speicher besorgt, auf den neuen Speicher verwiesen (Zeile 49), den Inhalt von lager_daten in diesen Speicher kopiert und der next Zeiger auf NULL gesetzt.

    3. Weiter bei 1.

    4. Fertig.

    Der NULL-Zeiger dient als Endekennung.



  • Ok, ich dachte weil es Verkettete Listen heißt, nennt man jede ganze Struct eine Liste.

    Nochmals vielen Dank für die Erklärungen.



  • daniel2345 schrieb:

    Ok, ich dachte weil es Verkettete Listen heißt, nennt man jede ganze Struct eine Liste.

    Es heißt verkettete Liste, verkettete Listen ist die Mehrzahl.
    Eine verkettete Liste besteht aus miteinander verketteten Elementen.


Anmelden zum Antworten