Eine einfach verkette Liste



  • Kann mir da mal jemant helfen, bidde.

    // Einfach verkette Liste.cpp: Hauptprojektdatei.
    
    /*#############################################################
    
    Eine einfach verkette Liste
    
    #############################################################*/
    
    #include "stdafx.h"
    
    using namespace System;
    
    ref struct listenelement
    {
    	String ^daten;
    
    	listenelement next;
    };
    
    //neues Element am Ende der Liste einfügen
    
    void einfuegen(String ^datenneu, listenelement ^listenanfang)
    {
    	//ein Hilfshandle zum Wandern in der Liste
    
    	listenelement ^hilfsHandle;
    
    	//Hilfshandle an den Anfang der Liste setzen
    
    	hilfsHandle = listenanfang;
    
    	//Durch die Liste gehen, bis das letzte Element erreicht ist
    
    	whil (hilfsHandle->next != nullptr)
    	{	
    		hilfsHandle = hilfsHandle->next;
    	}
    
    	//Neues Element am Ende der Liste einfügen
    
    	hilfsHandle->next =gcnew listenelement;
    
    	//Hilfshandle auf das neue Element setzen
    
    	hilfsHandle = hilfsHandle->next;
    
    	//Zeichenkette im neuen Element eintragen
    
    	hilfsHandle->daten = datenneu;
    
    	//nullptr wird automatisch zugewiesen!
    
    }
    
    //Alle Element der Liste ausgeben
    
    void ausgeben(listenelement ^listenanfang)
    {
    	//ein Hilfshandle zum Wandern in der Liste
    
    	listenelement hilfsHandle;
    
    	hilfsHandle = listenanfang;
    
    	//erstes Element ausgeben
    
    	Console::WriteLine("{0}",hilfsHandle->daten);
    
    	//Solange das Ende der Liste noch nicht erreicht ist:
    
    	//Hilfshandle auf das nächste Element setzen und die Daten ausgeben
    
    	whil (hilfsHandle->next != nullptr)
    	{
    		hilfsHandle = hilfsHandle->next;
    
    		Console::WriteLine("{0}",hilfsHandle->daten);
    	}
    }
    
    int main(array<System::String ^> ^args)
    {
       //Handle auf den Anfang der Liste
    
    	listenelement ^listenanfang;
    
    	//das erste Element per Hand erzeugen
    
    	listenanfang = gcnew listenelement;
    
    	//Zeichenkette in das erste Element schreiben
    
    	//nullptr wird automatisch gesetzt
    
    	listenanfang->daten = "Element 0";
    
    	//in einer Schleife mehrere Daten einfügen
    
    	for (Int32 schleife=1; schleife<3;schleife++)
    
    		einfuegen("Element "+schleife,listenanfang);
    
    	//die Liste ausgeben
    
    	ausgeben(listenanfang);
    
        }
    

    Bekomme sehr ville Vehler



  • Ist das zu Übungszwecken?
    Es gibt nämlich im Framework schon eine verkettete Liste (ich denke, das ist sogar eine doppelt verkettete Liste).

    Simon



  • System::Collections::Generics::List



  • Ja das ist eine Übung um die arbeitsweise von listen und Handles zu verstehen.

    @Fatzi: Wie lauten den die Fehler, es würde das "suchen" vereinfachen wenn wie die kennen würden?

    Gruß
    Rudi G



  • ref struct listenelement
    {
        String ^daten;
        listenelement ^next;
    };
    

    Da fehlte ein ^.
    Ist mir gerade aufgefallen... hat sicher noch mehr probleme.

    @Rudi G: woher weisst Du denn dass es eine Übung ist... kennst Du Fatzi?

    Simon



  • simon.gysi schrieb:

    @Rudi G: woher weisst Du denn dass es eine Übung ist... kennst Du Fatzi?

    Nein ihn kenne ich garnicht aber die Aufgabe 😉

    Diese Aufgabe und auch die Aufgabe mit den "Kisten" und einige weiter aufgaben kenne ich vom "Fernstudium" einer großen Fernschule 🙂



  • Gehd noch nichd.
    Was mache ich nur valsch?

    Grus Fatzi



  • Du Postest keine Fehlermeldungen und Beschreibungen.



  • Alter, was ist mit deiner Rechtschreibung los? Valsch??

    Hab beim überfliegen deines Codes zum Bsp folgendes gesehen:

    whil (hilfsHandle->next != nullptr) 
        {    
            hilfsHandle = hilfsHandle->next; 
        }
    

    Bei while fehlt das e...



  • kann mir bitte jemand erklären, was das hier bedeutet:
    String ^daten;
    ?
    das ding da: ^
    vor daten was soll das ?



  • ^ ist ein managed Zeiger. Siehe Grundlagen C++/CLI



  • Ich würde es nicht als Zeiger sondern als "Referenz auf den GC-Heap" bezeichnen.



  • Du hast im Code sehr viele Fehler. Du vergisst teilweise einfach irgendwelche Zeichen! Dann sind Massenhaft Fehler normal!

    // Einfach verkette Liste.cpp: Hauptprojektdatei.
    
    /*#############################################################
    
    Eine einfach verkette Liste
    
    #############################################################*/
    
    #include "stdafx.h"
    
    using namespace System;
    
    ref struct listenelement
    {
        String ^daten;
    
        listenelement [b]^[/b]next;
    };
    
    //neues Element am Ende der Liste einfügen
    
    void einfuegen(String ^datenneu, listenelement ^listenanfang)
    {
        //ein Hilfshandle zum Wandern in der Liste
    
        listenelement ^hilfsHandle;
    
        //Hilfshandle an den Anfang der Liste setzen
    
        hilfsHandle = listenanfang;
    
        //Durch die Liste gehen, bis das letzte Element erreicht ist
    
        whil[b]e[/b] (hilfsHandle->next != nullptr)
        {   
            hilfsHandle = hilfsHandle->next;
        }
    
        //Neues Element am Ende der Liste einfügen
    
        hilfsHandle->next =gcnew listenelement;
    
        //Hilfshandle auf das neue Element setzen
    
        hilfsHandle = hilfsHandle->next;
    
        //Zeichenkette im neuen Element eintragen
    
        hilfsHandle->daten = datenneu;
    
        //nullptr wird automatisch zugewiesen!
    
    }
    
    //Alle Element der Liste ausgeben
    
    void ausgeben(listenelement ^listenanfang)
    {
        //ein Hilfshandle zum Wandern in der Liste
    
        listenelement [b]^[/b]hilfsHandle;
    
        hilfsHandle = listenanfang;
    
        //erstes Element ausgeben
    
        Console::WriteLine("{0}",hilfsHandle->daten);
    
        //Solange das Ende der Liste noch nicht erreicht ist:
    
        //Hilfshandle auf das nächste Element setzen und die Daten ausgeben
    
        whil[b]e[/b] (hilfsHandle->next != nullptr)
        {
            hilfsHandle = hilfsHandle->next;
    
            Console::WriteLine("{0}",hilfsHandle->daten);
        }
    }
    
    int main(array<System::String ^> ^args)
    {
       //Handle auf den Anfang der Liste
    
        listenelement ^listenanfang;
    
        //das erste Element per Hand erzeugen
    
        listenanfang = gcnew listenelement;
    
        //Zeichenkette in das erste Element schreiben
    
        //nullptr wird automatisch gesetzt
    
        listenanfang->daten = "Element 0";
    
        //in einer Schleife mehrere Daten einfügen
    
        for (Int32 schleife=1; schleife<3;schleife++)
    
            einfuegen("Element "+schleife,listenanfang);
    
        //die Liste ausgeben
    
        ausgeben(listenanfang);
    
        [b]return 0;[/b]
    
        }
    

    Ich hab mal hinzugefügt was du vergessen hast und es Fett geschrieben(Farbig hervorheben geht leider nicht).

    Dieses Skript aus dem Heft CPBS 5A ist genau so auch im Heft und wenn du dort richtig geschaut hättest, hättest du die Fehler sicher auch selbst gesehen. 😉


Anmelden zum Antworten