verkettete Liste mit Objekten C++ CLI

ogy

Grünschnabel
Hallo erstmal,

Ich versuche mich seit ca einem halben Jahr an C++/Cli. Im Rahmen meines Fernstudiums habe ich die Aufgabe erhalten, den unten
aufgeführten Code so anzupassen, dass das Listenende nicht immer neu ermittelt werden muss sondern in einem Handle abgespeichert
werden soll. Dieser Handle soll nach dem Anhängen eines neuen Elements dann immer auf das Ende der Liste gesetzt werden.

Hier das Orginal:

C:
/* +++++++++++++++++++++++++++++++++++++++++++++
Verkette Liste C++ CLI mit Objekten
++++++++++++++++++++++++++++++++++++++++++++++++++++*/


#include "stdafx.h"

using namespace System;

ref class listenelement {
	String ^daten;
	listenelement ^next;
public:
	Void datenSetzen(String ^datenneu); 
	Void anhaengen(String ^datenneu);
	Void ausgeben();
};

//die Zeichenkette in das Element schreiben
Void listenelement::datenSetzen(String ^datenneu) {
	daten=datenneu;
}
	
//neues Element am Ende der Liste anhängen
Void listenelement::anhaengen(String ^datenneu) {
	//hat next den Wert nullptr?
	//dann ein neues Element anhängen
	if (next == nullptr) {
		next = gcnew listenelement;
		next->daten=datenneu;
		//nullptr wird automatisch zugewiesen!
	}
	//sonst die Methode für next noch einmal aufrufen
	else
		next->anhaengen(datenneu);
	//nur zur Veranschaulichung
	Console::WriteLine("Daten {0} wurden eingefügt.",datenneu);
}

//Alle Elemente der Liste ausgeben
Void listenelement::ausgeben() {
	//den ersten Eintrag ausgeben
	Console::WriteLine("{0}",daten);
	//wenn das Ende nicht erreicht ist, die Methode für next erneut aufrufen
	if (next != nullptr)
		next->ausgeben();
}

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
	listenanfang->datenSetzen("Element 1");

	//in einer Schleife mehrere Elemente anfügen
	for (Int32 schleife=2;schleife<4;schleife++) 
		listenanfang->anhaengen("Element "+schleife);

	//die Liste ausgeben
	listenanfang->ausgeben();

	return 0;
}



Das Listenende soll an die Methode Void listenelement::anhaengen(String ^datenneu) übergeben werden . Und ich schaffe es einfach nicht.

So weit bin ich. Oder besser gesagt, so weit bin ich nicht...





C:
/* ########################################################
Einsendeaufgabe 6.2
##########################################################*/


#include "stdafx.h"

using namespace System;

ref class listenelement {
	String ^daten;
	listenelement ^next;
public:
	Void datenSetzen(String ^datenneu); 
	Void anhaengen(String ^datenneu);
	Void ausgeben();
};

//die Zeichenkette in das Element schreiben
Void listenelement::datenSetzen(String ^datenneu) {
	daten=datenneu;
}
	
//neues Element am Ende der Liste anhängen
Void listenelement::anhaengen(String ^datenneu) {
	//hat next den Wert nullptr?
	//dann ein neues Element anhängen
	if (next == nullptr) {
		next = gcnew listenelement;
		next->daten=datenneu;
		//nullptr wird automatisch zugewiesen!
	}
	//sonst die Methode für next noch einmal aufrufen
	else
		next->anhaengen(datenneu);
	//nur zur Veranschaulichung
	Console::WriteLine("Daten {0} wurden eingefügt.",datenneu);
}

//Alle Elemente der Liste ausgeben
Void listenelement::ausgeben() {
	//den ersten Eintrag ausgeben
	Console::WriteLine("{0}",daten);
	//wenn das Ende nicht erreicht ist, die Methode für next erneut aufrufen
	if (next != nullptr)
		next->ausgeben();
}

int main(array<System::String ^> ^args)
{
	//Handle auf den Anfang der Liste
	listenelement ^listenanfang;
	listenelement  ^listenende;			//Zeiger der immer auf das Listenende zeigen soll

	//das erste Element per Hand erzeugen
	listenanfang = gcnew listenelement;
	//Zeichenkette in das erste Element schreiben
	listenanfang->datenSetzen("Element 1");

	listenende = listenanfang;			//listenende wir auf Listenanfang gesetzt

	//in einer Schleife mehrere Elemente anfügen
	for (Int32 schleife=2;schleife<4;schleife++) 
		listenende->anhaengen("Element "+schleife);

			/*Hier ist der Punkt wo ich das Listenende für die zuletzt erzeugte Instanz aus der
			Methode Void listenelement::anhaengen(String ^datenneu)übergeben wollte... - Ohne Erfolg*/

	//die Liste ausgeben
	listenanfang->ausgeben();

	return 0;
}
 
Zuletzt bearbeitet von einem Moderator:
Zurück