verkettete Listen erstellen
-
Hallo,
Wie kann ich verkettete Listen erstellen? Ich wäre dankbar für kleine Programmcodes, Tipps und ähnliches... Ich habe zwar schon gesucht, aber noch nichts richtiges gefunden.
supersass1
-
Tjo,
also ne verkettete Liste besteht aus Strukturen, die aber nicht hintereinanderliegen wie im Array, sondern dafür einen Verweis auf den Nachfolger (evtl. zusätzlich noch zu dem Vorgänger) beeinhalten.
So etwa:struct Person { Person *p_Naechster; string Name; }
Wenn du jetzt eine neue Struktur "Person" erstellst, nimmst du das letzte Element deiner Liste, und setzt dort die p_Naechster-Variable auf den Pointer der neuen Struktur. Den Pointer in der neuen Struktur setzt du auf "NULL" damit du weißt, dass es das letzte Element ist der Liste.
Das gute hierbei ist, dass du recht schnell eine Person in die Mitte deiner Kette einfügen kannst, ohne jetzt alle Nachfolgenden Elemente zu verschieben.
Du musst aber entstprechende Vorsicht walten lassen, da sonst deine Kette "reißt".Die gute Nachricht ist, dass es die STL gibt, die so eine "list" schon fertig implemetiert.
-
Hallo...
Check mal die Klasse CList aus! (Wenn Du mit der MFC arbeitest)
Oder sieh Dir das mal an:
http://download.pearsoned.de/leseecke/VCPLUS6_21Tg/data/start.htm
Gruz
Danny
-
Sorry...Habe mich "verwählt"....Das ganze ist als URL anzusehen
Übrigens musst Du da unter Tag F MFC Hilfsklassen nachgucken....
Nochmals Grüsse
Danny
-
musst du guggen, wie dus brauchst.
entweder von den mfc ableiten, oder selbts erstellen.
dann musst du aber gucken, ob du einfach oder 2fach verkettet
brauchst, oder sogar noch nen listenanker nimmst//von mfc abgeleitet class CMyList : public CList { //hier spezielle member } //einfach verkettet class CMyListSingle { CMyListSingle* m_pNextObj; } //zweifach verkettet class CMyListDouble { CMyListDouble* m_pNextObj; CMyListDouble* m_pPrevObj; } //und zweifach mit listenanker class CMyListAnchor { CMyListAnchor* m_pNextObj; CMyListAnchor* m_pPrevObj; CMyListAnchor* m_pFirstObj; }
als beispiel. musst dann nur noch im constructor oder
eigener methode die pointer mit gültigen werten belegen.class CMyListAnchor { MyListAnchor (CMyListAnchor* pFirst = this, CMyListAnchor* pPrev = this, CMyListAnchor* pNext = this); CMyListAnchor* m_pNextObj; CMyListAnchor* m_pPrevObj; CMyListAnchor* m_pFirstObj; } CMyListAnchor::CMyListAnchor ( CMyListAnchor* pFirst, CMyListAnchor* pPrev, CMyListAnchor* pNext) { m_pFirstObj = pFirst; m_pPrev = pPrev; m_pNext = pNext; }
nur mal so als ansatz
cu, ich
-
Hm, statt die veralteten Klassen der MFC zu nutzen, kann
er sich gleich im Standard bedienen und std::list nehmen.Devil
-
warum einfach, wenn auch kompliziert geht?
-
devil81 schrieb:
Hm, statt die veralteten Klassen der MFC zu nutzen, kann
er sich gleich im Standard bedienen und std::list nehmen.Devil
Wer behauptet eigentlich das die Klassen veraltet sind?
Die MFC befindet sich seit VC7.1 in der Version 7.1 und ist bereits
für 64Bit Anwendungen vorbereitet. Ich denke das die Entwickler den
Code der MFC-Container überarbeitet haben, habe das jedoch noch nicht
im Sourcecode verglichen... (gehe aber davon aus).Wenn ich die MFC verwende, benutze ich auch die MFC-Container, ist jedoch meine
persönliche Meinung.
-
Mensch, der Supersass1 hat aber auch überhaupt keine Ahnung. *g*