Dynamische verschachtelte Strukturen
-
Ich habe 3 Strukturen: Personen, Autos und ein Fahrtenbuch
Nun soll in dem Buch wann welche Person mit welchem Auto gefahren ist.
Ich möchte somit mit vom Buch auf eine Person zeigen.
Man kann den Namen eingeben mein Programm durchsucht die Personen Struktur und gibt einen Zeiger mit der Position zurück.
Alle Strukturen sind dynamisch und können jederzeit befüllt werden.Meine Frage: wie speichere ich die Position jetzt in der Fahrtenbuch Struct?
Hier ein paar Codeauszüge:
struct car { struct car *car_left; struct car *car_right; int ikm; char cname [MAX]; char clinu [MAX]; char ccolor [MAX]; char cbrand [MAX]; }; struct person { int iid; char cname[MAX]; struct person *person_left; struct person *person_right; }; struct log { struct person; struct car; int ikm; struct log *log_left; struct log *log_right; }; void seach(char *seachname) { struct person *pos =NULL; if (person_start != NULL) { person_current = person_start; while (person_current != NULL) { if(strcmp(person_current->cname,seachname) == 0) { pos = person_current; break; } person_current = person_current->person_right; } printf("Wrong input. Please try it again."); } else printf("Nothing to seach.\n"); }
Ist das dann ne verschachtelte oder n verkettete Liste?
-
person_start?
Was bitte macht person_left und person_right?
Willst du einen baum erzeugen?
-
Die Liste ist doppelt verkettet. Damit zeigt ein Element jeweils auf das Vorgänger Element und das Nachfolger Element. Hätte auch ne einfach verkettete machen können aber wollt das mal testen. Aber tut für meine Frage eigentlich nichts zu Sache oder?
Start ist der Zeiger auf das erste Element.
-
Was versprichst du dir davon die doppelt zu verketten?
Wo wird denn start deklariert? person_current ist auch nicht deklariert aber du initialisierst...
struct person; struct car;
Du arbeitest doch mit Zeigern. Das kannst aber keine zeiger drin speichern...
-
Es handelt sich um Code Auszüge. Alle Zeiger werden korrekt deklariert aber ich habe den Code hier nicht abgebildet weil mein Programm schon ziemlich lang ist und soweit funktioniert.
Von der doppelten Verkettung erhoffe ich mir nichts. Es tut doch nichts zur Sache ob einfach oder doppelt. Wollte es nur mal ausprobieren so von der Logik her und das funktioniert auch.Es geht mir jetzt wirklich nur darum das ich Elemente der 2 Strukturen in der Log Struktur aufrufen kann.
Wie macht man das?
-
struct person *p; struct car *c;
Und die Pointer einfach auf die beiden Objekte zeigen lassen. Oder hab ich dein Problem jetzt nicht verstanden?
-
Ja genau darum geht es mir!
struct log { struct person *pperson; struct car *pcar; int ikm; struct log *log_left; struct log *log_right; };
Auch wenn es für dich ein paar banale Zeilen Code sind, bin ich durch probieren nicht drauf gekommen.
Dabei erscheint es mir jetzt auch einleuchtend einfach.
Durch probieren habe ich noch folgende Erkenntnisse gewonnen (für alle die vielleicht genauso auf der Leitung stehen wie ich).
Deklaration des Positionszeiger'snew->pperson = seach_person(cname);
New zeigt auf das neue Strukturelement der Strukur log. Die Suchfunkton habe ich so umgeschrieben das sie den Zeiger zurück gibt.
Zugrif auf die Daten die in der verknüpften Personen struct gespeichert sind
log_current->pperson->cname
Also kurz um es funktioniert. Vielen Dank.
Jetzt muss ich mir nur überlegen wie ich die Daten sinnvoll in die CSV speichere. Also Personen und Autos habe ich schon, doch wenn ich einfach die Daten des Fahrtenbuches speichern würde, doppeln sich ja die Inhalte. Vermutlich werde ich jeweils nur ein Merkmal der beiden anderen Strukturen abspeichern und beim erneuten ausführen der Datei über meine Suchfunktion jedes mal neu den Zusammenhang herstellen. Owohl mir das ein wenig umständlich erscheint.
Aber eine Frage zu den Begriffen hätte ich noch!
Hanelt es sich jetzt in meinem Fall um eine veschachteltete, verkettete Struktur?
Eine Datums Struktur die aus einer Termin Struktur aufgerufen wird handelt es sich um eine Verschachtelung. Aber wenn ich von einer Struktur auf ein Element einer anderen Struktur zeige (wie in meinem Fall) ist das dann auch verschachtelt?
-
Es ist auf jedenfall schon mal eine verkettete Liste. Und diese gleich doppelt.
Verschachtelt weiß ich jetzt nicht genau, da der zeiger zwar auf ein eigenes struct zeigt, dieses aber an für sich nicht zur log struct gehört. Ich würde sagen verschachtelt ist es nicht, bin mir dabie aber wie gesagt nicht ganz sicher.
btw:
struct person; struct car;
Damit wollt ich drauf hinaus das er Zeiger braucht. Habs ja eigentlich sogar konkret im beitrag stehen gehabt: Du arbeitest doch mit Zeigern. Das kannst aber keine zeiger drin speichern...