zeigerprobleme
-
hi,
kann mir jemand bei folgendem code helfen ? verstehe so manches nicht...
mit push_front soll eine liste an den anfang gesetzt werden.struct node_t {
string name;
node_t* next;
};struct list_t {
node_t* anfang;
int anzahl;
};void init(list_t& liste) {
liste.anfang = 0;
liste.anzahl = 0;
}void push_front(list_t& liste, const string& name) {
node_t* neu = new node_t; //hier fangen meine probleme an. warum brauchst man new zum anlegen eines neuen zeigers? -> erzeuge neuen zeiger vom typ node_t der auf die (neu erstellte)struktur node_t zeigt ??
neu->name = name; //der name des zeigers v. node_t soll der von string im funktionsparameter sein. ok, verstanden.
neu->next = liste.anfang; // zeiger next soll auf den listenanfang zeigen??? warum ?
liste.anfang = neu; // listenanfang soll auf node_t gesetzt sein ? auch hier, warum ???++liste.anzahl;
}I'm lost...
-
1. Benutzt mal die Cpp-Tags. Ist ja kaum lesbar was dort steht.
2. Was und wo genau verstehst du denn nicht?? Stell bitte präzise fragen.
-
ist echt ne verdammt schlechte implementierung einer veketteten Liste. google mal findest bestimmt noch sauberen code.
1. mit new werden objekte auf den heap abgelegt
2. deine push methode fügt ein node objekt an anfang der liste an, deswegen muss das eingefügte node objekt auf das erste element der liste anfangen
3. liste.anfang muss beim einfügen auf das erst node objekt zeigen deswegen zeigt es auf das eingefügte nodedu solltest erstmal das prinzip von verketteten Listen verstehen.
-
void push_front(list_t& liste, const string& name) { node_t* neu = new node_t; //hier fangen meine probleme an. warum brauchst man new zum anlegen eines neuen zeigers? -> erzeuge neuen zeiger vom typ node_t der auf die (neu erstellte)struktur node_t zeigt ?? neu->name = name; //der name des zeigers v. node_t soll der von string im funktionsparameter sein. ok, verstanden. neu->next = liste.anfang; // zeiger next soll auf den listenanfang zeigen??? warum ? liste.anfang = neu; // listenanfang soll auf node_t gesetzt sein ? auch hier, warum ??? ++liste.anzahl; }
- "warum brauchst man new zum anlegen eines neuen zeigers?" Braucht man gar nicht. Aber du willst nicht nur einen Zeiger anlegen, sondern einen neuen Listenknoten, der vorne an die Liste angehängt wird. Deshalb new node_t, und damit man damit auch arbeiten kann, wird ein Zeiger auf diesen neuen Knoten gesetzt.
- das Datenfeld name in diesem neuen Knoten wird auf den übergebenen Wert gesetzt
- Wenn du den erzeugten Knoten an den Anfang der Liste setzen willst, muss der next-Zeiger des neuen Knotens auf den alten ersten Knoten zeigen.
- Es gibt jetzt einen neuen ersten Knoten, und damit der gefunden wird, muss der Anfangszeiger der Liste verändert werden
PS: Ich finde es trotz fehlender Codetags lesbar(mit wär aber besser) und die Fragen sind auch ausreichend präzise.
-
hm, wohin die tags verschwunden sind weiß ich auch nicht...
aber mit einer mütze schlaf und bashars erklärungen, hab ich's verstanden.
thx
PS.Hat jemand noch einen guten Anfänger- Link für Listen/Zeiger?
-
scube schrieb:
hm, wohin die tags verschwunden sind weiß ich auch nicht...
aber mit einer mütze schlaf und bashars erklärungen, hab ich's verstanden.
thx
PS.Hat jemand noch einen guten Anfänger- Link für Listen/Zeiger?
Pointer:
http://www.exonet.de/exonet.php3?doc=ctutorial/pointers.html