019
22.01.2009, 00:55 Uhr
0xdeadbeef
Gott (Operator)
|
Also, wenn ich eine einfach verkettete Liste mit Listenkopf schriebe, dann finge ich das wohl etwa so an (template-Kram der Übersichtlichkeit halber weggelassen):
C++: |
struct list_node { list_node *next; int value; };
class list { public: inline std::size_t size() const { return size_; } void add(int x);
private: list_node *head_; std::size_t size_; };
void list::add(int x) { list_node *node = new list_node;
node->next = head_; node->value = x;
head_ = node; ++size_; }
|
Möglicherweise würde ich der list_node noch einen Konstruktor spendieren, aber das wär's dann auch.
Aber: Wenn ich jetzt die list_node nach außen geben will, dann muss ich für die Außenwelt ein brauchbares Interface zur Verfügung stellen, zum Beispiel so:
C++: |
class list;
class list_node { public: inline list_node *next() { return next_; } inline list_node const *next() const { return next_; }
inline int value() const { return value_; } inline void value(int x) { value_ = x; }
private: friend class list; list_node *next_; int value_; };
class list { public: list_node *find(int x); list_node const *find(int x) const;
void insert(list_node *pos, int x); // etc.
private: list_node *head_; std::size_t size_; };
|
Und nerven tuste nicht, nein. Du fragst ja bloß Kram, um ihn besser zu verstehen, dafür habe ich sowohl Verständnis als auch Respekt.
Wenn du jetzt mit irgendeiner völlig albernen Idee herkämst, wie...weddicknich...eine rückwärts verkettete Liste, die trotzdem am Kopf angefasst wird oder so, und darauf bestündest, dass es sich um die tollste Idee der Welt handele, weil sie deinem Hirn entsprungen sei, dann sähe das vielleicht anders aus. *mit dem Zaunpfahl in Richtung eines anderen Threads wink* -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra Dieser Post wurde am 22.01.2009 um 01:00 Uhr von 0xdeadbeef editiert. |