Struct Aufgabe < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 14:56 So 25.07.2010 | Autor: | qsxqsx |
Hallo,
Ich löse gerade eine alte Prüfung, und mir ist einfach eine Aufgabe mehr vom Textlichen nicht klar, obwohl ich das "eigentlich" kapiere mit verketteten Listen und so... - aber gibt hald keine Lösungen dazu.
Hier die Aufgabe:
"Vervollständigen Sie nun den Stammbaum mit den Mitgliedern. Deklarieren Sie dazu nun Pointer für Heike,Manfred und Norbert und erstellen Sie die dazugehörigen Instanzen mit den entsprechenden Werten dynamisch auf dem Heap. Vergessen Sie nicht die neuen Instanzen korrekt zu verbinden."
Ein Bild:
[Dateianhang nicht öffentlich]
Die Aufgabe ist ja eigentlich zimlich einfach, nur irgendwie häng ich fest. Ich habe erstens ein durcheinander wie die Pointer sein sollen und zweitens macht mir das "...dynamisch auf dem Heap" mühe.
Also meine "Lösung":
-----------------------------------------------------------------------------------------------
struct person{
string name;
int jahr;
person * mutter;
person * partner;
};
person * Norbert = new person;
Norbert->name = Norbert;
Norbert->jahr = 1970;
Norbert->mutter = Heike;
Norbert->partner = NULL;
// hier bin ich nicht sicher ob es "*Heike" sein soll oder einfach "Heike".
-----------------------------------------------------------------------------------------------
Wäre das so richtig gemäss der aufgabenstellung? Und analog für die anderen zwei...? Das "dynamisch auf dem Heap" meint einfach ich soll new benutzen? Habe ich alles an der Aufgabestellung erfüllt?
Beim googeln nach Structs und Verketteten Listen habe ich noch ein Beispiel gefunden was bei mir für Verwirrung gesorgt hat:
-----------------------------------------------------------------------------------------------
struct item {
struct item * next;
int daten;
};
struct list {
struct item * start;
struct item * end;
};
void einfuegen(int datum, struct list *liste, struct item *vorg)
{
// Dynamisch neues listenelement
struct list * neues_element = malloc(sizeof(struct liste);
neues_element -> daten = datum;
neues_element -> next = vorg -> next;
vorg -> next = neues_element;
if (list -> start == vorg)
list -> start = neues_elem;
}
-----------------------------------------------------------------------------------------------
Was ich nicht verstehe ist, die erzeugung des neuen Elementes. Da wird doch ein Pointer namens "neues_element" vom Typ list erzeugt. Und dann wird mit "-> daten" auf das zugegriffen. Aber "daten" befindet sich doch im struct item und nicht im struct list. ...?
Danke!!!
Gruss Qsxqsx
Dateianhänge: Anhang Nr. 1 (Typ: jpg) [nicht öffentlich]
|
|
|
|
Hallo!
So weit ist das korrekt, das dynamische verbirgt sich in dem NEW.
MIt dem
person *norbert;
legst du fest, daß norbert ein Zeiger auf ein Objekt des Typs person ist.
Wenn du genauso heike anlegst, dann ist Norbert->mutter = Heike; völlig korrekt, denn hier wird ein Zeiger in den anderen kopiert. Du brauchst kein Sternchen.
Aber einen Bug hast du noch: Du kannst Heike nicht verwenden, solange sie zuvor noch nicht deklariert wurde!
Was dein zweites Beispiel angeht: Ich denke, da hat sich tatsächlich ein Fehler eingeschlichen, das muß in der Tat ein item sein.
Nebenbei hast du in deinem Beispiel C++ benutzt, da gibt es das new. In C gibt es das nicht, hier muß mit malloc Speicher herangeschafft werden.
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 18:47 So 25.07.2010 | Autor: | qsxqsx |
Hi,
Echt super, danke! Genau was ich wissen wollte - ja das mit dem malloc wusst ich auch nicht, hab aber gedacht das frag ich jetzt nicht auch noch, wird irgend was spezielles sein...ist gut zu wissen.
Gruss!
|
|
|
|