Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

doppelt verkettete Liste und Ausgabe rückwärts

Empfohlene Antworten

Veröffentlicht

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

Hallo

du musst dein struct noch ergänzen:


ref struct listenelement

{

	String ^daten;

	listenelement ^next;

	listenelement ^ende;

[B]	listenelement ^prev;

	listenelement ^start;[/B]};

Dadurch kennt jedes element sowohl seinen vorgänger, als auch seinen nachfolger.

  • Autor

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

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).
  • Autor

Aha!!

Jetzt noch mal die Frage. Es kann so beleiben wie es jetzt ist?

Antwort währe nett, da ich das ganze dann doch verstanden habe

Lieben Gruß und besten Dank

lempy

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.