verkettete Liste
-
Hallo Leute
Ich hoffe ihr habt alle eine schöne Weihnacht verbracht.
Dieses Thema wurde laut Suchfunktion 2008 das letzte mal hier behandelt und darum greife ich es noch mal neu auf.
Ich habe die Tage genutzt und mich mit verketteten Listen beschäftigt und möchte jetzt eine von 2 Aufgaben lösen. Komme aber irgendwie nicht weiter.
Laut der Aufgabe soll ich eine einfach verkettete Liste so umwandeln, dass das Ende nach dem Anhängen nicht ständig neu ermittelt werden muss, sonder in einen dafür vorgesehenen Handle gespeichert wird.
Hier mein Versuch, von dem ich glaube dass er voll daneben ging. Funktioniert aber ohne murren des Compilers.
#include "stdafx.h" using namespace System; ref struct listenelement { String ^daten; listenelement ^next; }; // neues Element am Ende der Liste anhängen Void anhaengen (String ^datenneu, listenelement ^listenanfang) { // ein Hilfshandle zum Wandern in der Liste listenelement ^hilfsHandle; // HilfsHandle an den Anfang der Liste setzen hilfsHandle = listenanfang; // Hilfshandle zum Speichern des Vorgängers listenelement ^listenende; // Durch die Liste gehen, bis das letzte Element erreicht ist while (hilfsHandle -> next != nullptr) { hilfsHandle = hilfsHandle -> next; } // Aktuelle Adresse im Listenende speichern listenende = hilfsHandle; // Neues Element am Ende der Liste anhängen 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 Elemente 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 while (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 1"; // in einer Schleife mehrere Elemente einfügen for (Int32 schleife = 2; schleife < 4; schleife++) anhaengen("Element " + schleife, listenanfang); // die Liste ausgeben ausgeben(listenanfang); Console::Read(); return 0; }
Währe sehr Dankbar, wenn ihr mir das noch mal für Dummies erklären könntet. Das nächste Arbeitsheft beschäftigt sich mit der "Einführung in die objektorientierte Programmierung". Wird schwer zu verstehen sein, wenn ich nicht einmal die verketteten Listen verstehen. Obwohl auf den Zeichnungen alles klar ist, ist es schwer für einen Anfänger das ganze in Code zu fassen.
Übrigens muss ich ab den 2. Januar wieder in die Schule, und habe dann wieder weniger Zeit hier rein zu schauen. Nur so als Hinweis, wenn ich mich länger nicht melde.
Lieben Dank
champman