Verständnisproblem verkette Listen



  • Hi!

    Ich komme bei den verketteten Listen etwas durcheinander!
    Folgendes:

    typedef struct node {
    T* data;
    struct node* next; } Node, *nodeptr;
    
    typedef struct list {
    nodeptr first, last; } List, *listptr;
    

    macht mir etwas zu schaffen.
    T* soll hier Zeiger auf Objekt data vom Typ T sein.

    Dann verstehe ich nicht, wie "struct node* next" zustande kommt.
    Warum struct? Ich dachte ich möchte hier nur einen Zeiger auf den nächsten Knoten?

    Warum initialisiere ich mit typedef zwei Variablen ("Node" und "*nodeptr")?

    Hab mir das im Skript und im Internet mehrmals durchgelesen, vielleicht kann mir das hier jemand besser erläutern?

    Grüße!



  • Krachi schrieb:

    Dann verstehe ich nicht, wie "struct node* next" zustande kommt.
    Warum struct? Ich dachte ich möchte hier nur einen Zeiger auf den nächsten Knoten?

    Und der Knoten ist vom Typ struct node
    Darum brauchst du auch einen Zeiger auf diesen Typ. Sonst klappt dass mit dem Zugriff nicht.

    Krachi schrieb:

    Warum initialisiere ich mit typedef zwei Variablen ("Node" und "*nodeptr")?

    Tust du nicht (denen wird ja kein Inhalt/Wert zugewiesen).
    Du definierst eine Variablen und einen Zeiger.

    Ein typedef alleine nützt dir nichts. Du willst auch mit der struct arbeiten.
    Irgendwo muss ja der Speicher herkommen, wo du die Adressen für data und next ablegst.



  • Achso danke!

    Hat mir sehr geholfen!



  • Eine Frage noch betreffend dieses Videos:

    http://www.youtube.com/watch?v=wQdWrXYuzlU

    ca Minute 4:20

    Warum wird auf Vorname und Nachname via Pointer gezeigt und auf Alter nicht?



  • Ich habe Mist geschrieben. 😡 Sorry

    typedef struct node {...
    } Node, *nodeptr;
    

    Damit definierst du zwei neue Variablentypen.
    Der eine heißt Node und ist die struct node.
    Der andere heißt nodeptr und ist ein Zeigertyp auf struct node.

    Damit sparst du dir Tipparbeit, denn du kannst jetzt Node statt struct node schreiben (jedoch noch nicht im typedef)

    nodeptr ist nicht ganz so notwendig, da es auch mit Node* geht.



  • Krachi schrieb:

    Warum wird auf Vorname und Nachname via Pointer gezeigt und auf Alter nicht?

    Weil Name und Vorname C-Strings sind. Namen gibt es in vielen unterschiedlichen Längen (von "Tom" bis "Pippilotta Viktualia Rollgardina Pfefferminz Efraimstochter").
    Wenn du jetzt immer Platz für den Namen der Frau Langstrumpf vorhälts, verschwendest du Speicher. (und hast nicht genug Platz für noch längere Namen)
    Darum wird für solche Fälle der Speicher passend dynamisch geholt.

    Bei einem int ist das nicht der Fall. Der belegt evtl. sogar weniger Platz als ein Zeiger (oder auch gleich viel).


Anmelden zum Antworten