000
08.04.2006, 10:38 Uhr
ref
|
Der Code zum erzeugen ein einfache liste:
C++: |
// Arbeiten mit einer Liste #include <iostream> #include <cstring>
using namespace std;
struct Knoten { char Name[50]; int Alter; Knoten* Nachfolger; // Zeiger auf den Nachfolger };
// Funktionsprototypen* Knoten* Letztes(void); void NeuesElement(char* Name, int Alter); void ElementeAusgeben(void); void ListeLoeschen(void);
// den Listenkopf definieren Knoten Listenkopf;
int main(void) { cout << "Daten fuer den Listenkopf angeben\n";
cout << "Alter: "; cin >> Listenkopf.Alter; cout << "Name : "; cin >> Listenkopf.Name;
cout << "Daten eingeben (Alter -1 fuer Ende)\n";
int Alter = 0; char Puffer[50];
// bei einer -1 wird die Eingabe abgebrochen while(-1 != Alter) { cout << "Alter: "; cin >> Alter;
if(-1 != Alter) { cout << "Name : "; cin >> Puffer; NeuesElement(Puffer, Alter); } }
ElementeAusgeben();
ListeLoeschen(); }
Knoten* Letztes(void) { Knoten* p = &Listenkopf;
while(NULL != p->Nachfolger) { p = p->Nachfolger; }
return p; }
void NeuesElement(char* Name, int Alter) { Knoten* Element = new Knoten;
strcpy(Element->Name, Name); Element->Alter = Alter; Element->Nachfolger = NULL;
Letztes()->Nachfolger = Element; }
void ElementeAusgeben(void) { Knoten* p = &Listenkopf;
while(NULL != p) { cout << p->Name << " " << p->Alter << '\n'; p = p->Nachfolger; } }
void ListeLoeschen(void) { while(NULL != Listenkopf.Nachfolger) { Knoten* p = &Listenkopf;
while(Letztes() != p->Nachfolger ) { p = p->Nachfolger; }
delete Letztes(); p->Nachfolger = NULL; } }
|
die frage : schauen wir folgendes code-abschnitt an hier soll irgenwann p->Nachfolger gleich NULL sein und raus aus dem while schleife ich finde aber, es gibt kein grund, warum soll p->Nachfolger NULL sein ? ANALYSIEREN Wir mal diesem code-abschnitt: p ist ein zeiger auf Listenkopf , da gab es nirgenwo im code, dass Listenkopf->Nachfolger = NULL gibt es nicht , es gibt nur Element->nachfolger = NULL und Nicht Listenkopf->Nachfolger = NULL , hier wird nur die liste Listenkopf durchgesucht oder, ? warum also p->Nachfolger wird irgendwann NULL sein, ich will nur das verstehen danke in vorraus.
C++: |
Knoten* Letztes(void) { Knoten* p = &Listenkopf;
while(NULL != p->Nachfolger) { p = p->Nachfolger; }
return p; }
|
-- Man kann ein Problem nicht mit der gleichen Denkweise lösen, mit der es erschaffen wurde. (Albert Einstein) Dieser Post wurde am 08.04.2006 um 10:39 Uhr von ref editiert. |