T
traknoxx
Hallo,
ich bin C++ Schüler und komme bei einer Aufgabe die ich lösen soll nicht weiter.
Vielleicht kann mir hier jemand helfen, wäre für alle Tipps dankbar!
hier zunächst der Ausgangs-Quellcode:
/* #################################################
Eine einfach verkettete Liste mit Objekten
################################################# */
#include "stdafx.h"
using namespace System;
ref class listenelement {
String ^daten;
listenelement ^next;
public:
void datenSetzen(String ^datenneu);
void einfuegen(String ^datenneu);
void ausgeben();
};
//die Zeichenkette in das Element schreiben
void listenelement::datenSetzen(String ^datenneu) {
daten=datenneu;
}
//neues Element am Ende der Liste einfügen
void listenelement::einfuegen(String ^datenneu) {
//hat next den Wert nullptr?
//dann ein neues Element einfügen
if (next == nullptr) {
next = gcnew listenelement;
next->daten=datenneu;
//nullptr wird automatisch zugewiesen!
}
//sonst die Methode für next noch einmal aufrufen
else
next->einfuegen(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 ^liste;
//das erste Element per Hand erzeugen
liste = gcnew listenelement;
//Zeichenkette in das erste Element schreiben
liste->datenSetzen("Element 0");
//in einer Schleife mehrere Elemente einfügen
for (Int32 schleife=1;schleife<3;schleife++)
liste->einfuegen("Element "+schleife);
//die Liste ausgeben
liste->ausgeben();
return 0;
}
und hier die Aufgabenstellung:
Erweitern Sie die einfach verkettete Liste mit den Objekten so, dass das Listenende beim Einfügen nicht immer wieder neu ermittelt werden muss, sondern neue Elemente direkt am Ende der Liste eingefügt werden können.
Hilfestellungen:
-Keine Änderungen an der Klasse selbst
-Sie müssen neben dem Anfang der Liste nun auch das Ende der Liste in einem Handle speichern können.
-Setzten Sie den Handle nach dem Einfügen neuer Elemente jeweils auf das aktuelle Ende der Liste.
nun mein Lösungsansatz:
#include "stdafx.h"
using namespace System;
ref class listenelement {
String ^daten;
listenelement ^next;
public:
void datenSetzen(String ^datenneu);
void einfuegen(String ^datenneu);
void ausgeben();
};
//die Zeichenkette in das Element schreiben
void listenelement::datenSetzen(String ^datenneu) {
daten=datenneu;
}
//neues Element am Ende der Liste einfügen
void listenelement::einfuegen(String ^datenneu) {
//ein neues Element einfügen
next = gcnew listenelement;
//Zeichenkette im neuen Element eintragen
next->daten=datenneu;
//nullptr wird automatisch zugewiesen!
//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;
//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 0");
//Default Listenende
listenEnde = listenAnfang;
//in einer Schleife mehrere Elemente einfügen
for (Int32 schleife=1;schleife<3;schleife++)
listenEnde->einfuegen("Element "+schleife);
//die Liste ausgeben
listenAnfang->ausgeben();
return 0;
}
Leider funktioniert das so noch nicht so wie es eingentlich sollte :-(
Ich denke dass das Problem in der Main-Funktion ist, aber ich komme einfach nicht dahinter.
Wäre sehr dankbar für hilfreiche Tipps...
Danke schon mal für eure Mühe
Grüß traknoxx
ich bin C++ Schüler und komme bei einer Aufgabe die ich lösen soll nicht weiter.
Vielleicht kann mir hier jemand helfen, wäre für alle Tipps dankbar!
hier zunächst der Ausgangs-Quellcode:
/* #################################################
Eine einfach verkettete Liste mit Objekten
################################################# */
#include "stdafx.h"
using namespace System;
ref class listenelement {
String ^daten;
listenelement ^next;
public:
void datenSetzen(String ^datenneu);
void einfuegen(String ^datenneu);
void ausgeben();
};
//die Zeichenkette in das Element schreiben
void listenelement::datenSetzen(String ^datenneu) {
daten=datenneu;
}
//neues Element am Ende der Liste einfügen
void listenelement::einfuegen(String ^datenneu) {
//hat next den Wert nullptr?
//dann ein neues Element einfügen
if (next == nullptr) {
next = gcnew listenelement;
next->daten=datenneu;
//nullptr wird automatisch zugewiesen!
}
//sonst die Methode für next noch einmal aufrufen
else
next->einfuegen(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 ^liste;
//das erste Element per Hand erzeugen
liste = gcnew listenelement;
//Zeichenkette in das erste Element schreiben
liste->datenSetzen("Element 0");
//in einer Schleife mehrere Elemente einfügen
for (Int32 schleife=1;schleife<3;schleife++)
liste->einfuegen("Element "+schleife);
//die Liste ausgeben
liste->ausgeben();
return 0;
}
und hier die Aufgabenstellung:
Erweitern Sie die einfach verkettete Liste mit den Objekten so, dass das Listenende beim Einfügen nicht immer wieder neu ermittelt werden muss, sondern neue Elemente direkt am Ende der Liste eingefügt werden können.
Hilfestellungen:
-Keine Änderungen an der Klasse selbst
-Sie müssen neben dem Anfang der Liste nun auch das Ende der Liste in einem Handle speichern können.
-Setzten Sie den Handle nach dem Einfügen neuer Elemente jeweils auf das aktuelle Ende der Liste.
nun mein Lösungsansatz:
#include "stdafx.h"
using namespace System;
ref class listenelement {
String ^daten;
listenelement ^next;
public:
void datenSetzen(String ^datenneu);
void einfuegen(String ^datenneu);
void ausgeben();
};
//die Zeichenkette in das Element schreiben
void listenelement::datenSetzen(String ^datenneu) {
daten=datenneu;
}
//neues Element am Ende der Liste einfügen
void listenelement::einfuegen(String ^datenneu) {
//ein neues Element einfügen
next = gcnew listenelement;
//Zeichenkette im neuen Element eintragen
next->daten=datenneu;
//nullptr wird automatisch zugewiesen!
//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;
//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 0");
//Default Listenende
listenEnde = listenAnfang;
//in einer Schleife mehrere Elemente einfügen
for (Int32 schleife=1;schleife<3;schleife++)
listenEnde->einfuegen("Element "+schleife);
//die Liste ausgeben
listenAnfang->ausgeben();
return 0;
}
Leider funktioniert das so noch nicht so wie es eingentlich sollte :-(
Ich denke dass das Problem in der Main-Funktion ist, aber ich komme einfach nicht dahinter.
Wäre sehr dankbar für hilfreiche Tipps...
Danke schon mal für eure Mühe
Grüß traknoxx