Hallo an alle,
ich stehe vor einem großem Problem. Ich bin Anfänger in C++ und arbeite schon seit sehr sehr langer Zeit an zwei Aufgaben, die euch sicherlich bekannt vorkommen, denn im Forum fand ich die Frage schon mehrmals, aber nicht in reinem C++. Ich habe schon das ganze Internet durchsucht, jedoch fand ich nichts was C++ auch nur ähnelt. Vielleicht fand ich den einen oder anderen Quelltext in C# oder C++/CLI und habe auch versucht den Quelltext entsprechend bei mir anzuwenden. (also Syntax etc geändert) Jedoch erfolglos. Deshalb bin ich hier und hoffe ihr könnt mir helfen.
Zunächst einmal soll ich in der Funktion anhaengen() einen Zeiger anwenden, der immer auf das Ende der Liste zeigt, sodass das Ende nicht bei jedem anhängen neu ermittelt werden muss. Als Hilfestellung ist gegeben, listenanfang durch listenende in der Funktion anhaengen(), als Argument zu ersetzen.
Als nächstes soll ich aus der einfach verketteten Liste eine doppelt verkettete Liste machen und die Liste um eine Funktion erweitern, die es ermöglicht die Liste rückwärts auszugeben.
großen Dank im vorraus
ich stehe vor einem großem Problem. Ich bin Anfänger in C++ und arbeite schon seit sehr sehr langer Zeit an zwei Aufgaben, die euch sicherlich bekannt vorkommen, denn im Forum fand ich die Frage schon mehrmals, aber nicht in reinem C++. Ich habe schon das ganze Internet durchsucht, jedoch fand ich nichts was C++ auch nur ähnelt. Vielleicht fand ich den einen oder anderen Quelltext in C# oder C++/CLI und habe auch versucht den Quelltext entsprechend bei mir anzuwenden. (also Syntax etc geändert) Jedoch erfolglos. Deshalb bin ich hier und hoffe ihr könnt mir helfen.
Zunächst einmal soll ich in der Funktion anhaengen() einen Zeiger anwenden, der immer auf das Ende der Liste zeigt, sodass das Ende nicht bei jedem anhängen neu ermittelt werden muss. Als Hilfestellung ist gegeben, listenanfang durch listenende in der Funktion anhaengen(), als Argument zu ersetzen.
Als nächstes soll ich aus der einfach verketteten Liste eine doppelt verkettete Liste machen und die Liste um eine Funktion erweitern, die es ermöglicht die Liste rückwärts auszugeben.
großen Dank im vorraus
C++:
/* ##################################
Verkettete Liste
###################################*/
#include <iostream>
using namespace std;
//Die Struktur für die Listenelemente
struct listenelement
{
string daten;
listenelement* next;
};
//Eine Funktion zum Anhängen von Elementen an die Liste
void anhaengen(string datenneu, listenelement* listenanfang)
{
//ein lokaler Hilfszeiger, um in der Liste wandern zu können
listenelement* hilfszeiger;
//den Hilfszeiger an den Anfang der Liste setzen
hilfszeiger = listenanfang;
//Durch die Liste gehen, bis das letzte Element erreicht ist
while (hilfszeiger->next != NULL)
hilfszeiger = hilfszeiger->next;
//ein neues Element an das Ende der Liste anhängen
hilfszeiger->next = new(listenelement);
//den Hilfszeiger auf das neue Element setzen
hilfszeiger = hilfszeiger->next;
//die Daten in das neue Element eintragen
hilfszeiger->daten = datenneu;
//es gibt keinen Nachfolger, daher wird next auf NULL gesetzt
hilfszeiger->next = NULL;
}
//Eine Funktion zum Ausgeben aller Elemente
void ausgeben(listenelement *listenanfang)
{
//Ein lokaler Hilfszeiger, um in der Liste wandern zu können
listenelement* hilfszeiger;
//den Hilfszeiger auf den Anfang der Liste setzen
hilfszeiger = listenanfang;
//das erste Element ausgeben
cout << hilfszeiger->daten << '\n';
//Solange das Ende der Liste noch nicht erreicht ist:
while (hilfszeiger->next != NULL)
{
//den Hilfszeiger hilfszeiger auf das nächste Element setzen
hilfszeiger = hilfszeiger->next;
//Daten ausgeben
cout << hilfszeiger->daten << '\n';
}
}
//die Liste leeren und Speicher freigeben
void ende(listenelement* listenanfang)
{
//Ein lokaler Hilfszeiger, um in der Liste wandern zu können
listenelement* hilfszeiger;
//Solange noch Elemente in der Liste sind
while (listenanfang != NULL)
{
//den Hilfszeiger auf das erste Element der Liste
hilfszeiger = listenanfang;
//den Zeiger für den Listenanfang auf das nächste Element setzen
listenanfang = listenanfang->next;
//den Speicher für das herausgenommene Element freigeben
delete(hilfszeiger);
}
}
int main ()
{
//ein Zeiger auf den Anfang der Liste
listenelement* listenanfang;
//das erste Element erzeugen
listenanfang = new(listenelement);
//Daten in das erste Element schreiben
listenanfang->next = NULL;
listenanfang->daten = "Element 1";
//und jetzt weitere Elemente erzeugen
anhaengen("Element 2", listenanfang);
anhaengen("Element 3", listenanfang);
anhaengen("Element 4", listenanfang);
//die Liste ausgeben
ausgeben(listenanfang);
//die Liste wieder abbauen
ende(listenanfang);
return 0;
}