[GELÖST + FRAGE KORRIGIERT] Liste mit Mehrfach-Zeiger (doppelter Indirektion): Warum?



  • Mein Fehler.

    Eigentlich wollte ich folgendes abgleichen:

    struct Knoten
    {
         Element element;
         struct Knoten* naechster;
    };
    
    struct Knoten* Wurzel;  
    
    void insert(struct Knoten* Start, Element Einf)
    {
         struct Knoten** laeufer;
         for(laeufer=&Start;*laeufer;laeufer=&((*laeufer)->naechster))
         {
            /* such-Algo, die Schleife wird verlassen, wenn das Element */
            /* gefunden ist, welches dem einzufügenden Element nachfolgt */
         }
    
         struct Knoten* n=malloc(struct Knoten);
         n->naechster=*laeufer;
         *laeufer=n;
    }
    

    versus

    //dieselbe struct
    void insert(struct Knoten* Start, Element Einf)
    {
         struct Knoten* laeufer;
         for(laeufer=Start;laeufer;laeufer=laeufer->naechster)
         {
            /* such-Algo, die Schleife wird verlassen, wenn das Element */
            /* gefunden ist, welches dem einzufügenden Element nachfolgt */
         }
    
         struct Knoten* n=malloc(struct Knoten);
         n->naechster=laeufer;
         laeufer=n;
    }
    

    Der Fehler ist laeufer=n, weil laeufer eine lokale Variable ist, die ihren Gültigkeitsbereich wieder verliert 😡 . Man kann es aber retten mit (hier vereinfacht mit int x, wenn man ob mit x die Schleifendurchläufe gezählt hat)

    struct Knoten** laeufer2;
    laeufer2=&Start;
    for(i=0;i<x;i++)laeufer2=&((*laeufer2)->nxt);
    *lauefer2=n
    

    Das würde funktionieren, gerade probiert 😃 , zeigt aber, dass doppelte Indirektion hier effizient ist



  • An verkett. Listen ist überhaupt nichts effizient.



  • Wutz schrieb:

    An verkett. Listen ist überhaupt nichts effizient.

    doch, das Einfügen.



  • Du hast keine Ahnung, also halt die Klappe.



  • Wutz schrieb:

    Du hast keine Ahnung, also halt die Klappe.

    Füg doch mal was bei einem großen Array ein. DAS ist ineffizient und DU hast keine Ahnung. 🙂



  • Arrays sind in ihrer Größe unveränderlich - du hast hast keine Ahnung wovon du sprichst sondern plapperst nur aufgeschnapptes Halbwissen nach - halt die Klappe.



  • Wutz schrieb:

    Arrays sind in ihrer Größe unveränderlich

    Na immerhin das weißt du. Und was folgt daraus?
    Ich verrate es dir. Du musst ein neues Array anlegen und alles umkopieren, wenn du was einfügen willst.

    Und jetzt laber noch mal Blödsinne über Ineffizienz von Listen, du Troll!



  • Dorfdepp. Du hast keine Ahnung. Du weißt nicht, was Arrays sind. Es gibt auch keine großen Arrays.
    Halt die Klappe.



  • Wutz schrieb:

    Dorfdepp. Du hast keine Ahnung. Du weißt nicht, was Arrays sind. Es gibt auch keine großen Arrays.
    Halt die Klappe.

    Hahaha, jetzt dreht der Dummtroll völlig frei, 😃 👍


  • Mod

    Da offenbar niemand mehr etwas Nützliches zu sagen hat, schließe ich den Thread.


Anmelden zum Antworten