L
lyon64
Hallo,
habe eine neue Aufgabe eingestellt, die fast fertig ist, allerdings nur fast
Eine einfach verkettete Liste mit Objekte rückwärts ausgeben.
Vorgabe:
keine doppelt verkettete Liste erstellen
es soll die Methode ausgabeRueckwaerts () erstellen, die sich rekursiv aufruft
das Programm soll 5 Elemente vorwärts und dieselben Elemente rückwärts ausgeben
Mein code: ACHTUNG: Programm geht nicht ************!!
[ccp)
#include "stdafx.h"
using namespace System;
ref class listenelement {
String ^daten;
listenelement ^next;
public:
void datenSetzen(String ^datenneu);
void anhaengen(String ^datenneu);
void ausgeben();
void ausgebenRueckwaerts ();
};
//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();
}
// *** NEU *** Alle Elemente rückwärts ausgeben ***rekursiv***
void listenelement::ausgebenRueckwaerts()
{
if(next != nullptr)
next->ausgebenRueckwaerts();
Console::WriteLine("{0}",next);
}
int main(array<System::String ^> ^args)
{
//Handle auf den Anfang der Liste
listenelement ^listenAnfang;
//Handle auf das Ende der Liste
listenelement ^listenEnde;
//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<6;schleife++)
listenAnfang->anhaengen("Element "+schleife);
//die Liste ausgeben
listenAnfang->ausgeben();
//die Liste rückwärts ausgeben
listenEnde->ausgebenRueckwaerts();
return 0;
}
[/ccp]
Wer kann mir hier einen Tipp geben.
Danke und Gruß
lyon64
habe eine neue Aufgabe eingestellt, die fast fertig ist, allerdings nur fast

Eine einfach verkettete Liste mit Objekte rückwärts ausgeben.
Vorgabe:
keine doppelt verkettete Liste erstellen
es soll die Methode ausgabeRueckwaerts () erstellen, die sich rekursiv aufruft
das Programm soll 5 Elemente vorwärts und dieselben Elemente rückwärts ausgeben
Mein code: ACHTUNG: Programm geht nicht ************!!
[ccp)
#include "stdafx.h"
using namespace System;
ref class listenelement {
String ^daten;
listenelement ^next;
public:
void datenSetzen(String ^datenneu);
void anhaengen(String ^datenneu);
void ausgeben();
void ausgebenRueckwaerts ();
};
//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();
}
// *** NEU *** Alle Elemente rückwärts ausgeben ***rekursiv***
void listenelement::ausgebenRueckwaerts()
{
if(next != nullptr)
next->ausgebenRueckwaerts();
Console::WriteLine("{0}",next);
}
int main(array<System::String ^> ^args)
{
//Handle auf den Anfang der Liste
listenelement ^listenAnfang;
//Handle auf das Ende der Liste
listenelement ^listenEnde;
//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<6;schleife++)
listenAnfang->anhaengen("Element "+schleife);
//die Liste ausgeben
listenAnfang->ausgeben();
//die Liste rückwärts ausgeben
listenEnde->ausgebenRueckwaerts();
return 0;
}
[/ccp]
Wer kann mir hier einen Tipp geben.
Danke und Gruß
lyon64