doppel verkettete Liste
-
Geht das wirklich nicht ohne Klassen? Laut Vorlesung kann ich an dieser Stelle noch gar keine Klassen

-
Was ich ja eigentlich wissen wollte, ist, ob diese Funktion von der Überlegung her zumindestens Ansatzweise richtig wäre. Ich hab sie noch ein bisschen erweitert (um die previous-Richtung; is ja doppelt verkettet):
void insertAfter(node *head, node *end, int wert) { node *insert_element; insert_element = new node; //insert_element anlegen insert_element->value = wert; //in value den Wert schreiben //next-Richtung insert_element->next = head->next; //von head auf insert_element verbinden head->next = insert_element; //von insert_element auf end verbinden //previous-Richtung insert_element->previous = end->previous; end->previous = insert_element; }Ich hab hier quasi ein head-Element und ein end-Element. Und genau zwischen diesen Elementen möchte ich ein neues Element das insert_element einhängen.
-
vip@r schrieb:
Geht das wirklich nicht ohne Klassen? Laut Vorlesung kann ich an dieser Stelle noch gar keine Klassen

Eine struct ist eine Klasse. Einziger Unterschied zwischen struct und class:
Default-Sichtbarkeit bei class = private
Default-Sichtbarkeit bei struct = publicEdit: Was EOutOfResources dir wohl sagen wollte ist, dass du keine freien Funktionen machen sollst, sondern Methoden.
lg
-
Gugelmoser schrieb:
vip@r schrieb:
Geht das wirklich nicht ohne Klassen? Laut Vorlesung kann ich an dieser Stelle noch gar keine Klassen

Eine struct ist eine Klasse. Einziger Unterschied zwischen struct und class:
Default-Sichtbarkeit bei class = private
Default-Sichtbarkeit bei struct = publicEr lernt in seiner Vorlesung aber C mit cout. Da ist das ein Unterschied vom Konzept her.
-
vip@r schrieb:
Geht das wirklich nicht ohne Klassen?
Doch, aber das ist ätzend.
vip@r schrieb:
Laut Vorlesung kann ich an dieser Stelle noch gar keine Klassen

nodeauch ist eine Klasse.EDIT: Viel zu langsam...
-
SeppJ schrieb:
Gugelmoser schrieb:
vip@r schrieb:
Geht das wirklich nicht ohne Klassen? Laut Vorlesung kann ich an dieser Stelle noch gar keine Klassen

Eine struct ist eine Klasse. Einziger Unterschied zwischen struct und class:
Default-Sichtbarkeit bei class = private
Default-Sichtbarkeit bei struct = publicEr lernt in seiner Vorlesung aber C mit cout. Da ist das ein Unterschied vom Konzept her.
Oh, das kenn ich von meinen Vorlesungen...
-
Wie siehts jetzt mit obiger (leider editierter) Funktion aus?
Stimmt das so, oder nicht?
-
vip@r schrieb:
Wie siehts jetzt mit obiger (leider editierter) Funktion aus?
Stimmt das so, oder nicht?
Hast du das Problem vollständig verstanden? Bist du der Meinung, es sollte so richtig sein? Funktioniert es? Warnt der Compiler nicht? Zeigt ein Speicherprüfer(z.B. valgrind) keine Fehler? Wenn du alle diese Fragen mit einem klaren Ja beantworten kannst, dann wird es wohl richtig sein. Ansonsten nicht. Aber dann hast du immerhin Techniken kennengelernt, wie du deinen Code auf grundlegende Funktion prüfen kannst. Das ist wichtiges Wissen.
-
Gut. Der compiler warnt mich vor keinem Fehler wenn ich diesen Code ausführe. valgrind benutze ich nicht. Ich denke aber wenn der compiler nicht schreit, sollte das genug sein. TROTZDEM muss das Programm nicht richtig sein, auch wenn der compiler nicht schreit, oder? Und genau das, wird mir kein noch so gutes (Zusatz-)Programm sagen können, oder?
#include<iostream> using namespace std; struct node { node *previous; int value; node *next; }; void initList(node *head, node *end) { head->next = end; end->next = end; end->previous = head; head->previous = head; } void insertAfter(node *head, node *end, int wert) { node *insert_element; insert_element = new node; //insert_element anlegen insert_element->value = wert; //in value den Wert schreiben //next-Richtung insert_element->next = head->next; //von head auf insert_element verbinden head->next = insert_element; //von insert_element auf end verbinden //previous-Richtung insert_element->previous = end->previous; end->previous = insert_element; } int main() { //node *element1, *element2, *element3, *element4; node *head, *end; head = new node; end = new node; initList(head, end); insertAfter(head, end, 5); return 0; }
-
vip@r schrieb:
Und genau das, wird mir kein noch so gutes (Zusatz-)Programm sagen können, oder?
Aber hast du denn wenigstens mal getestet, ob es funktioniert? Oder anders gefragt: Hast du irgendeinen begründeten Verdacht, dass irgendetwas nicht stimmen könnte, außer mangelndes Vertrauen in dein eigenes Können?