protected
Goto Top

C++ Verkettete Listen, Verständnisfrage

Hallo,
ich habe neben dem Quellcode Kommentare gemacht. Es wäre schön, wenn jemand drüber schauen könnte, und gucken kann ob ich es richtig verstanden habe. Bei manchen verstehe ich nicht so wirklich was passiert.

Was bedeutet der Anker? Sagt der mir die Position aus?
Ich habe zwei verkettet Listen.
void einfuegen(TListenKnoten* &anker, int wert_neu, int vor_wert) {
	TListenKnoten *neuer_eintrag = new TListenKnoten; // Lege Listenknoten an mit Pionter auf einen Listenknoten
	neuer_eintrag->data = wert_neu; // weise data Objekt den neuen Wert zu
	TListenKnoten *ptr = anker; // Setzte anker also startpunkt


	while (ptr->data != vor_wert && ptr->next != nullptr) { // Ungleich dem Wert davor, und ist nicht am ende
		ptr = ptr->next; // gehe solange weiter
	}


	if (ptr->next == nullptr) { // Wenn hinten
		ptr->next = neuer_eintrag; // was passiert hier?
		neuer_eintrag->prev = ptr->prev; // Gehe eins zurück und setze
		neuer_eintrag->next = nullptr; // Setze ende 
	}

	if (ptr->next != anker) { // ungleich anker
		neuer_eintrag->next = ptr; // der nächste eintrag ist ptr
		neuer_eintrag->prev = ptr->prev; // Gehe eins zurück und setze
		ptr->prev->next = neuer_eintrag; // was macht das?
	}
	else { // wenn gleich anker
		neuer_eintrag->next = anker;  // Anker wird auf nächsten eintrag von Liste 1 gesetzt
		anker = neuer_eintrag; // Anker wird gleich Liste 2 gesetzt
		ptr->prev = anker; // eintrag davor ist anker
	}


}

Content-ID: 327247

Url: https://administrator.de/contentid/327247

Ausgedruckt am: 22.11.2024 um 18:11 Uhr

Mooswitz
Mooswitz 21.04.2017 um 12:52:46 Uhr
Goto Top
Hallo Protected,

Der Code scheint ja erstmal nicht so schwer verständlich zu sein... (kann mich auch Täuschen)

An dieser Stelle:
	if (ptr->next == nullptr) { // Wenn hinten 
		ptr->next = neuer_eintrag; // was passiert hier? 
		neuer_eintrag->prev = ptr->prev; // Gehe eins zurück und setze 
		neuer_eintrag->next = nullptr; // Setze ende  
} 

// was passiert hier?
Wenn der letzte Eintrag ein nullptr ist, dann verschiebe den ptr einen Eintrag weiter, setze dort (an der Stelle von nullptr) einen neuen Eintrag "ptr->next=neuer_eintrag;" und schiebe die gesamte Liste eins zurück, um Platz für einen neuen nullptr zu schaffen. Setze dann an der nächsten Stelle einen neuen Nullpointer und definiere damit das Ende der Liste.

Da ich leider etwas unter Zeitdruck stehe, kann ich vorerst auf den Rest nicht antworten. Ich werde mich später wieder melden, wenn ich mehr Zeit habe.

Grüße, Mooswitz