Doppelte verkettete Liste



  • Hi, ich lerne seit 2 Monaten c++/cli und bin grad beim oben genannten Thema. Könnt mir jemand erklären warum mein Code nicht funktioniert und ob listende ^ sein zweck erfüllt?

    #include "stdafx.h"

    using namespace System;

    ref struct listenelement {

    String ^daten;

    listenelement ^next;

    listenelement ^previous;
    };

    listenelement ^anhaengen(String ^datenneu, listenelement ^listenende) {

    listenelement ^hilfsHandle;
    listenelement ^hilfsHandle2;

    hilfsHandle = listenende;

    while (hilfsHandle->next != nullptr)

    hilfsHandle = hilfsHandle->next;
    hilfsHandle2 = hilfsHandle;
    hilfsHandle->next = gcnew listenelement;
    hilfsHandle = hilfsHandle->next;
    hilfsHandle->previous = hilfsHandle2;
    hilfsHandle->daten=datenneu;

    listenende = hilfsHandle;
    return listenende;
    }
    Void ausgeben(listenelement ^listenanfang, listenelement ^listenende) {

    listenelement ^hilfsHandle;
    hilfsHandle = listenanfang;
    Console::WriteLine("{0}",hilfsHandle->daten);
    hilfsHandle = listenende;
    while (hilfsHandle->next != nullptr) {
    hilfsHandle = hilfsHandle->next;
    Console::WriteLine("{0}",hilfsHandle->daten) ;
    }
    }
    Void ausgeben_Back(listenelement ^listenende) {

    listenelement ^hilfsHandle;
    hilfsHandle = listenende;
    Console::WriteLine("{0}",hilfsHandle->daten);

    while (hilfsHandle->previous != nullptr) {
    hilfsHandle = hilfsHandle->previous;
    Console::WriteLine("{0}",hilfsHandle->daten) ;
    }
    }

    int main(array<System::String ^> ^args)
    {
    listenelement ^listenanfang;
    listenanfang = gcnew listenelement;
    listenanfang->daten="Element 1";

    listenelement ^listenende;
    listenende= gcnew listenelement;

    for (Int32 schleife=2;schleife<200;schleife++)
    anhaengen("Element "+schleife,listenende);

    ausgeben(listenanfang,listenende);
    ausgeben_Back(listenende);

    Console::Read();
    return 0;
    }



  • Könntest Du bitte Code-Tags benutzen, liest sich besser.
    Ich mach Dir das mal eben...

    #include "stdafx.h" 
    
    using namespace System; 
    
    ref struct listenelement { 
    
    String ^daten; 
    
    listenelement ^next; 
    
    listenelement ^previous; 
    }; 
    
    listenelement ^anhaengen(String ^datenneu, listenelement ^listenende) { 
    
    listenelement ^hilfsHandle; 
    listenelement ^hilfsHandle2; 
    
    hilfsHandle = listenende; 
    
    while (hilfsHandle->next != nullptr) 
    
    hilfsHandle = hilfsHandle->next; 
    hilfsHandle2 = hilfsHandle; 
    hilfsHandle->next = gcnew listenelement; 
    hilfsHandle = hilfsHandle->next; 
    hilfsHandle->previous = hilfsHandle2; 
    hilfsHandle->daten=datenneu; 
    
    listenende = hilfsHandle; 
    return listenende; 
    } 
    Void ausgeben(listenelement ^listenanfang, listenelement ^listenende) { 
    
    listenelement ^hilfsHandle; 
    hilfsHandle = listenanfang; 
    Console::WriteLine("{0}",hilfsHandle->daten); 
    hilfsHandle = listenende; 
    while (hilfsHandle->next != nullptr) { 
    hilfsHandle = hilfsHandle->next; 
    Console::WriteLine("{0}",hilfsHandle->daten) ; 
    } 
    } 
    Void ausgeben_Back(listenelement ^listenende) { 
    
    listenelement ^hilfsHandle; 
    hilfsHandle = listenende; 
    Console::WriteLine("{0}",hilfsHandle->daten); 
    
    while (hilfsHandle->previous != nullptr) { 
    hilfsHandle = hilfsHandle->previous; 
    Console::WriteLine("{0}",hilfsHandle->daten) ; 
    } 
    } 
    
    int main(array<System::String ^> ^args) 
    { 
    listenelement ^listenanfang; 
    listenanfang = gcnew listenelement; 
    listenanfang->daten="Element 1"; 
    
    listenelement ^listenende; 
    listenende= gcnew listenelement; 
    
    for (Int32 schleife=2;schleife<200;schleife++) 
    anhaengen("Element "+schleife,listenende); 
    
    ausgeben(listenanfang,listenende); 
    ausgeben_Back(listenende); 
    
    Console::Read(); 
    return 0; 
    }
    

    Du hast die Liste ziemlich unübersichtlich gebaut.

    listenelement ^previous;
    

    verstehe ich genauso wenig wie...

    listenelement ^hilfsHandle2;
    

    Vllt. solltest Du sie nochmal neu aufbauen.


Anmelden zum Antworten