003
02.10.2004, 00:14 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft... (Operator)
|
hab das als postmessage bekommen stell das mal hier zur allgemeinen diskussion rein
Zitat: |
Hallo ich habe eine woche zeit diese verkettete Liste zu verstehen. kannst Du mir bitte vieleicht tips geben wie ich das Am schnellsten verstehen kann. Es kommt bald einer Note da raus. Gruss
|
C++: |
//--------------------------------------------------------------------------- #ifndef KoordunitH #define KoordunitH
//--------------------------------------------------------------------------- class CKoord { private: double x; double y; public: CKoord(void); CKoord(double xVal, double yVal); void set(double xVal, double yVal); void setX(double xVal); void setY(double yVal); double getX(void); double getY(void); };
#endif _________________________________
//--------------------------------------------------------------------------- #include <vcl\vcl.h> #pragma hdrstop
#include "Koordunit.h" //---------------------------------------------------------------------------
CKoord::CKoord(void) : x(0), y(0) { }
CKoord::CKoord(double xVal, double yVal) : x(xVal), y(yVal) { }
void CKoord::set(double xVal, double yVal) { if(this) { x = xVal; y = yVal; } }
void CKoord::setX(double xVal) { if(this) { x = xVal; } }
void CKoord::setY(double yVal) { if(this) { y = yVal; } }
double CKoord::getX(void) { if(this) return(x); return(0); }
double CKoord::getY(void) { if(this) return(y); return(0); } ______________________________________
//--------------------------------------------------------------------------- #ifndef ChainlistunitH #define ChainlistunitH #include "Koordunit.h"
typedef class CKoord CData;
class CChainList { private: CChainList* next; CChainList* prev; CData* data; public: CChainList(CData* d = NULL); CChainList(CChainList* p, CData* d = NULL); ~CChainList(void); CChainList* getNext(void); CChainList* getPrev(void); CChainList* getFirst(void); CChainList* getLast(void); CData* getData(void); void setData(CData* d); void exchange(CChainList* le); }; #endif
______________________________________
//--------------------------------------------------------------------------- #include <vcl\vcl.h> #pragma hdrstop #include "Chainlistunit.h"
//--------------------------------------------------------------------------- CChainList::CChainList(CData* d) : next(NULL), prev(NULL), data(d) { }
CChainList::CChainList(CChainList* p, CData* d) : prev(p), data(d) { if(this->prev) // Habe ich einen Vorgänger? { // Ja, ich habe einen Vorgänger: this->next = this->prev->next; // Mein Nachfolger ist der Nachfolger von meinem Vorgänger this->prev->next = this; // Von meinem Vorgänger der Nachfolger bin ich if(this->next) // Habe ich einen Nachfolger? { // Ja, ich habe einen Nachfolger: this->next->prev = this; // von meinem Nachfolger der Vorgänger bin ich } } else // Nein, ich habe keinen Vorgänger { this->next = NULL; // Dann habe ich auch keinen Nachfolger } }
CChainList::~CChainList(void) { if(this->prev) // Wenn ich einen Vorgänger habe { this->prev->next = this->next; // dann ist der Nachfolger von meinem Vorgänger mein Nachfolger } if(this->next) // Wenn ich einen Nachfolger habe { this->next->prev = this->prev; // dann ist der Vorgänger meines Nachfolgers mein Vorgänger } delete data; // lösche Daten }
CChainList* CChainList::getNext(void) { if(this) return(next); return(NULL); }
CChainList* CChainList::getPrev(void) { if(this) return(prev); return(NULL); }
CChainList* CChainList::getFirst(void) { if(this) { CChainList *first = this; while(first->prev) { first = first->prev; } return(first); } return(NULL); }
CChainList* CChainList::getLast(void) { if(this) { CChainList *last = this; while(last->next) { last = last->next; } return(last); } return(NULL); }
CData* CChainList::getData(void) { if(this) return(data); return(NULL); }
void CChainList::setData(CData* d) { if(this) data = d; }
void CChainList::exchange(CChainList* le) { if(this && le) { CData* temp = le->data; le->data = this->data; this->data = temp; } }
|
öhm werd mal bitte genauer was du nicht versehst... an sonsten stell dir das einfach so vor das ein element der liste einfach aus daten selber (in dem fall die doublewerte) und einem zeiger auf ein listenelement besteht...
wenn du ne liste neu erstellst nimmst du einfach ein listenelement, füllst das mit den daten ,also in dem fall die doublewerte... und lässt den zeiger aufs nächste element (oder den aufs vorherige) auf 0 zeigen (was dann in dem fall heisst es kommt kein element mehr)...
wenn du jetzt ein element anhägen willst lässt du einfach den zeiger des alten elementes auf das neue zeigen usw... so erstellst du dir eine liste... mehr ist nicth dabei... -- ...fleißig wie zwei Weißbrote |