Zum Inhalt springen

doppelt verkettete Liste und Ausgabe rückwärts


lempy

Empfohlene Beiträge

Hallo Leute

Nach der einfachen verketteten Liste nun die doppelt verkettete Liste mit der Ausgabe Rückwärts.

Die Ausgabe Rückwärts klappt aber ich glaube, ich habe die doppelt verkettete Liste nicht verstanden. Sieht in den bildlichen Darstellung ganz logisch aus, aber mit dem ins Programm umsetzen tue ich mich recht schwer.

Währe nett, wenn einer von Euch mal in paar verständliche Anmerkungen dazu machen könnte, wie bei der einfach verketteten Liste.

Hier mein Code:

// Test zu 5_2.cpp: Hauptprojektdatei.



#include "stdafx.h"


using namespace System;


ref struct listenelement

{

	String ^daten;

	listenelement ^next;

	listenelement ^ende;

};


// neues Element am Ende der Liste anhängen


Void anhaengen (String ^datenneu, listenelement ^listenanfang)

{

	// ein Hilfshandle zum Wandern in der Liste


	listenelement ^hilfsHandle;


	// HilfsHandle an den Anfang der Liste setzen


	hilfsHandle = listenanfang;


	// Hilfshandle zum Speichern des Vorgängers


	listenelement ^listenende;


	// Durch die Liste gehen, bis das letzte Element erreicht ist


	while (hilfsHandle -> next != nullptr)

	{

		hilfsHandle = hilfsHandle -> next;

	}


	// Aktuelle Adresse im Listenende speichern


	listenende = hilfsHandle;


	// Neues Element am Ende der Liste anhängen


	hilfsHandle -> next = gcnew listenelement;


	// Hilfshandle auf das neue Element setzen


	hilfsHandle = hilfsHandle -> next;


	// Vorgänger in letzte Adresse speichern


	hilfsHandle -> ende = listenende;



	// Zeichenkette im neuen Element eintragen


	hilfsHandle -> daten = datenneu;


	// nullptr wird automatisch zugewiesen!

}


// Alle Elemente der Liste ausgeben




Void ausgaberueckwaerts ( listenelement^ listenende)

{


	Console::WriteLine("{0}",listenende->daten) ;             

    while (listenende->ende != nullptr) 

    { 

        listenende = listenende->ende; 

        Console::WriteLine("{0}",listenende->daten) ; 

    }   


    //Eine leere Zeile ausgeben 

    Console::WriteLine(); 

}


Void ausgeben (listenelement ^listenanfang)

{

	// ein Hilfshandle zum Wandern in der Liste


	listenelement ^hilfsHandle;


	hilfsHandle = listenanfang;


	// erstes Element ausgeben


	Console::WriteLine("{0}", hilfsHandle -> daten);


	// Solange das Ende der Liste noch nicht erreicht ist:

	// hilfshandle auf das nächste Element setzen und die Daten ausgeben


	while (hilfsHandle -> next != nullptr)

	{

		hilfsHandle = hilfsHandle -> next;


		Console::WriteLine("{0}", hilfsHandle -> daten);

	}


		Console::WriteLine("\n\n\n");



	ausgaberueckwaerts (hilfsHandle);

}


int main(array<System::String ^> ^args)

{

	// Handle auf den Anfang der Liste

	listenelement ^listenanfang;


	//listenelement ^listenende;


	// das erste Element per Hand erzeugen


	listenanfang = gcnew listenelement;


	// Zeichenkette in das erste Element schreiben

	// nullptr wird automatisch gesetzt


	listenanfang -> daten = "Element 1";


	// in einer Schleife mehrere Elemente einfügen


	for (Int32 schleife = 2; schleife < 5; schleife++)


		anhaengen("Element " + schleife, listenanfang);


	// die Liste ausgeben


	ausgeben(listenanfang);




	//ausgaberueckwaerts(listenende);


	Console::Read();


    return 0;

}

Lieben Dank

Lempy

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Rekon1602

Danke erst ein mal.

^start und ^prev muss ich sicherlich noch in das Programm mit einbauen? Nur wie und wo? Verwirrt mich ein wenig, denn aus der Aufgabenstellung geht das für mich nicht hervor und die doppelt verkettete Liste wurde auch nicht näher behandelt.

Ich gebe die Angaben dazu.

"Erweitern Sie die einfach verkettete Liste so, dass sie zu einer doppelt verketteten Liste wird. Ergänzen Sie das Programm außerdem um eine Funktion, die die Liste rückwärts ausgibt.

1. Hilfestellung: Sie benötigen einen neuen Handle in der Struktur, der die Adresse des Vorgängers aufnehmen kann. Das soll bei listen ^ende sein

2. Hilfestellung: Die wichtigste Änderung müssen Sie beim Anhängen des neuen Elements vornahmen. Hier müssen Sie die Adresse des Vorgängers in Sicherheit bringen " Das soll bei mir listenelement ^listenende sein. z. B. listenende = hilfsHandle und dann hilfsHandle -> next -> ende bei mir.

Vielleicht kannst Dur mir mit einer Erklärung, warum doch nicht nur ^ende, sondern auch noch ^start und ^prev Licht in die Dunkelheit bringen.

Mit lieben Dank

lempy

Link zu diesem Kommentar
Auf anderen Seiten teilen

Vielleicht kannst Dur mir mit einer Erklärung, warum doch nicht nur ^ende, sondern auch noch ^start und ^prev Licht in die Dunkelheit bringen.
Du brauchst keine weiteren Handles. Die Benennung des Handles des Vorgängers mit "ende" ist nur sehr ungewöhnlich und verwirrend. Bei diesem Namen würde man erwarten, dass das Handle eben auf das Listenende verweist, nicht auf das jeweilige Vorgängerelement. Der "übliche" Name dafür wäre prev (als Gegenstück zu next).
Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...