Einfach verkettete Liste
-
Hallo Leute.Ich will aus einer einfach verketteten Liste eine doppelt verkettete Liste machen.
Kann mir da jemand helfen?
Hier ist die einfach verkettete Liste:P.S Die funktion ausgeben() darf nicht verändert werden.
#include <iostream.h>
// Definition des Typs für die Elemente der Liste als Struktur
struct listenelement {
char daten[30];
listenelement* next;
};// Zeiger auf den Anfang der Liste
listenelement* listenanfang;// Hilfszeiger, um in der Liste wandern zu können
listenelement* hilfszeiger;// Funktion zum Einfügen von Elementen in die Liste
void einfuegen(char datenneu[30]) {
// 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;
}
// Neues Element in die Liste einfügen
hilfszeiger->next = new(listenelement);
// Hilfszeiger auf das neue Element setzen
hilfszeiger = hilfszeiger->next;
// Daten im neuen Element eintragen
strcpy(hilfszeiger->daten,datenneu);
hilfszeiger->next = NULL;
}// Alle Elemente der Liste ausgeben
void ausgeben() {
// Hilfszeiger auf den Anfang der Liste setzen
hilfszeiger = listenanfang;
// erstes Element ausgeben
cout << hilfszeiger->daten << "\n";
// Solange das Ende der Liste noch nicht erreicht ist :
while (hilfszeiger->next != NULL) {
//hilfszeiger auf nächstes Element setzen
hilfszeiger = hilfszeiger->next;
//Daten ausgeben
cout << hilfszeiger->daten << "\n";
}
}// Initialisieren der Liste
void init() {
//erstes Element erzeugen
listenanfang = new(listenelement);
//Daten in das erste Element schreiben
listenanfang->next = NULL;
strcpy(listenanfang->daten,"Element 0");
}// Liste leeren und speicher freigeben
void ende() {
//Solange noch Elemente in der Liste sind
while (listenanfang != NULL) {
//Hilfszeiger auf das erste Element der Liste
hilfszeiger = listenanfang;
//Zeiger für den Listenanfang auf das
//nächste Element setzen
listenanfang = listenanfang->next;
//Das herausgenommene Element löschen
delete(hilfszeiger);
}
}void main () {
init();
einfuegen("Element 1");
einfuegen("Element 2");
ausgeben();
ende();char p[50];
cin.getline(p,50);
}
-
Naja, also prinzipiell musst du einfach in dein Listenelement einen Eintrag *previous mit dazunehmen. Ausgeben klappt dann noch genauso. Du musst nur bei Listenoperationen immer drauf achten, dass du nicht nur den next-Zeiger sondern auch den previous-Zeiger anpasst. Das hört sich einfach an, ist aber teilweise ziemlich nervig - vorallem wenn du Elemente einfügst musst du insgesamt 4 Zeiger setzen und brauchst evtl. einen Hilfszeiger als Zwischenspeicher.
Wars das was du meintest oder suchst du ne Implementation?
-
Servus ihr beiden,
ich stehe vor einem ähnlichen Problem aus ner einfach verketteten Liste eine doppelt verkettete Liste zu erstellen. Kann jemand dazu mal ein paar Quellcodezeilen posten, wäre echt hilfreich.
Ich sage schon mal ganz artig dankeschön und wünsche euch noch ne schöne Woche.P.S. Ist schon komisch das es im Forum nicht direkt was dazu gibt zu dem Thema, in jeder Schule mit Programmieren wird dieser Bereich durchgenommen.
-
[/quote]
Ist schon komisch das es im Forum nicht direkt was dazu gibt zu dem Thema, in jeder Schule mit Programmieren wird dieser Bereich durchgenommen.
[quote]So seltsam ist das gar nicht, wenn man nicht gerade versucht zu verstehen wie das geht, benutzt man einfach Zeugs aus der STL.
Und da in einem Forum wie hier, wo wohl fast ausschließlich Hobbyisten vorbei kommen, suche die meisten auch einfach nur Lösungen für praxisnahe Probleme, für die, die STL dann auch besser ist.@doppelt verkettete Liste:
Was die doppelt verkettete Liste angeht, einfach mal in Google eingeben.
http://hal.iwr.uni-heidelberg.de/lehre/inf1-ws02/html/node126.html
War das erste Ergebnis.
Gefällt res seuch nicht, einfach den nächsten Link anklicken.