000
17.05.2007, 19:12 Uhr
jack26
|
Hi Leute,
ich bearbeite gerade ne alte C Klausur und bin beim Verkettete Listen Teil angekommen. Ich habe die erste Aufgabe gelöst, häng aber irgendwie bei der 2ten, wäre nett wenn mir jemand meine Fragen beantworten könnte.
Die Codevorgabe lautete folgendermaßen:
C++: |
#include <stdio.h> #include <stdlib.h> #include <string.h>
struct person { char *name; struct person *next; }; int main(void) { struct person p3 = {"Schulze", NULL}; struct person p2 = {"Meier", &p3}; struct person p1 = {"Kohl",&p2}; struct person *liste = &p1; drucke(liste); // Kohl Meier Schulze drucke(invertiere(liste)); // Schulze Meier Kohl }
|
1. Für die erste Aufgabe sollte ich die Namen, wie im ersten Kommentar, in korrekter Reihenfolge ausgeben, mit Hilfe einer Prozedur "drucke", gesagt getan:
C++: |
void drucke(struct person *obj) {
printf("%s ",obj->name); printf("%s ",obj->next->name); printf("%s \n",obj->next->next->name); }
|
Warum muss ich denn hier eigentlich den Pfeiloperator(-> für die Ausgabe verwenden?? Warum geht dies nicht auch mit obj.name etc.?? Ich weiß das liegt an call by reference, ich versteh nur noch nicht ganz den Zusammenhang.
2. Für die zweite Aufgabe muss ich eine Funktion "invertiere" schreiben, die aus einer übergebenen Liste eine neue erzeugt, nur mit umgekehrter Namens-Reihenfolge, wie im zweiten Kommentar beschrieben. Die Liste darf nicht verändert werden. Jemand ne Idee??
Ich hoffe ihr könnt mir weiterhelfen, ich weiß, dass sieht etwas viel aus, aber is gar nich soviel, glaub ich jedenfalls.
Vielen Dank. Gruß jack26 |