Doppelt verkettete Liste

Hallo, ich habe ein Problem mit einer Aufgabe:

„Implementieren sie eine doppelt verkettete Liste. Benutzen sie dazu eine Klasse circle_list als Container. Zur Repräsentation der Listenknoten benutzen sie
die Klasse circle_list_node. Diese enthält Zeiger auf das vorherige und das
nächste Element und hält ein Objekt vom Typ circle.
Die Listenenden werden durch einen Nullzeiger NULL gekennzeichnet. Implementieren
sie den Standard-Konstruktor und Destruktor.
Implementieren sie ausserdem folgende Methoden: Zum Hinzufügen und Entfernen
von circle Objekten nutzen sie die Methoden push_front und pop_front.
Die Methoden front und back , geben das erste bzw. das letzte circle Objekt in
der Liste zurück. Die Methode size gibt die Länge der Liste zurück und die
Methode empty , ob die Liste leer ist.“

Dazu habe ich einmal folgendes:

struct circle\_list\_node
{
 circle\_list\_node(circle const& r,
 circle\_list\_node\* const p,
 circle\_list\_node\* const n)
 : data(r),
 prev(p),
 next(n)
{}
circle data;
circle\_list\_node\* prev;
circle\_list\_node\* next;
};

Das war uns vorgegeben, hier kommt das was ich bisher alleine hinbekommen habe:

#include "circle\_list\_node.hpp"

class circle\_list{

 public:

 circle\_list();
 ~circle\_list();

 void push\_front(circle const& c);
 void pop\_front();

 circle const& front() const;
 circle const& back() const;


 private:

 circle\_list\_node\* begin\_;
 circle\_list\_node\* end\_;
 unsigned size\_;
};

hier dazu noch die .cpp:

#include "circle\_list.hpp"

circle\_list::circle\_list():
 begin\_(NULL),
 end\_(NULL),
 size\_(0) {}


void circle\_list::stuck\_out\_tongue:ush\_front(circle const& c) {
 if(size\_ == 0) {
 begin\_ = new circle\_list\_node(c, NULL, NULL);
 last\_ = begin\_;
 ++size\_;
 }
 else {
 circle\_list\_node\* tmp = begin\_;
 }
}

Ich weiß so in etwa was eine doppelt verkettete Liste können muss. Aber ich habe echt große Probleme damit wie ich das realisiere. Ich weiß einfach nicht wie ich was zu schreiben habe.
Wenn mir da jemand helfen könnte wäre ich echt froh =)
Danke schonmal im Vorraus!

Gruß Ionel

von mir gibts ne schritt für schritt anleitung des schemas , da kann man wenigstens nochmal die logik überprüfen :smile: hoffe es hilft .

die hab ich mir glaub schon gefühlte 1000 mal durchgelesen :smiley: ist wirklich ne gute anleitung, aber das ist eben die C-Syntax, ich brauche die C+±Syntax. Hast du vllt auch eine Anleitung für C++?
Aber danke schonmal dafür =)

aber das ist eben die
C-Syntax, ich brauche die C+±Syntax.

Kann ich jetzt nicht nachvollziehen. C++ ist im Allgemeinen eine Obermenge von C. Natürlich ist es angenehmer, dass man Call-by-Reference keine Zeigernotation mehr verwenden muss. Aber dort, wo es wirklich um Zeiger geht, halte ich die Zeigernotation auch unter C++ noch angebracht.

Zu Deiner Aufgabenstellung:
Ich bin etwas verwundert, dass die geforderten Methoden irgendwie eher zu einem Stapel als zu einer doppelt-verzeigerten Liste passen und nicht die spezifischen Möglichkeiten darstellen, derentwegen man überhaupt doppelt-verzeigerte Listen verwendet.
Das ist aber eine rein fachliche Fragestellung, die nichts C- oder C+±Spezifisches an sich hat.

Bei der Implementation einer doppelt-verzeigerte Liste gibt es ein paar wichtige Grundsatzentscheidungen, die in der Aufgabenstellung völlig untergehen.
Aber das erschließt sich erst, wenn man die Grundprinzipien verinnerlicht hat.

Ciao, Allesquatsch

Noch eine Anleitung
Hallo,

mit kleinen Bildern, die das Ganze erklaeren sollen: http://perlgeek.de/de/artikel/doppelt-verkettete-listen
Wenn du konkrete Fragen dazu hast, her damit, ich freue mich immer ueber Feedback (ich bin der Autor dieses Artikels).

Gruesse,
Moritz

Gruesse,
Moritz

Moin, hab ich ihr doch deine URL gelinkt :smile:

Aber gut nun weiss sie das sie Deine seite schon fast 1000 mal gelesen hat (jedenfals waren das gefühlte 1000) :smile:

Ich hab aber noch was zu ihrer prev und next version gefunden.

Eine Lösung von einem Schüler irgentwo in der Welt