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.