ZimZalabim hat geschrieben:
1. Wie bzw. Wo kann ich feststellen wieviele Elemente schon in der Liste sind? Gibt es eine Funktion ElementeZaelen?
Nur, wenn Du sie (richtig) schreibst (ElementeZaehlen)

.
Auch wenn dein Programm noch nicht besonders "ausgereift" (

) ist, fällt mir gleich was auf: Du hast die Struktur "PersonenListe" genannt. Das ist schon mal ein wenig ungeschickt, weil das ja keine Liste ist, sondern nur ein Element davon. Mag pingelig erscheinen, aber beim Programmieren tut man sich m.E. viel leichter, wenn man die Dinge als das benennt, was sie sind:
Code: Alles auswählen
struct person
{
struct person *next;
char *vorname;
char *nachname;
int alter;
};
/*
* bestimme Anzahl Elemente einer mit NULL beendeten Personenliste
*/
int num_elements(struct person *start)
{
struct person *p = start;
int anz = 0;
while (p)
{
anz++;
p = p->next;
}
return anz;
}
Weiterhin hast Du gleich die Kür gewählt - die doppelt verkettete Liste. Die braucht man eigentlich nur dann, wenn man die Liste auch in zwei Richtungen (vorwärts _und_ rückwärts) durchlaufen (Informatiker sagen "iterieren" dazu) können will, was dann nützlich ist, wenn man schon weiß, in welche Richtung es wohl "näher" zum gewünschten Element sein könnte (also wenn die Liste sortiert ist).
Ansonsten machst Du die Sache nur unnötig kompliziert und ineffizient (weil Du Zeiger verwalten mußt, die Du gar nicht brauchst oder nicht nutzt).
ZimZalabim hat geschrieben:
2. Mir ist noch nicht klar wie ich ein neues Element eingefuegt werden soll, an eine bestimmte Position
Dazu solltest Du dir zunächst mal klar werden, wie Du die Speicherverwaltung realisieren willst. Also mal nachlesen, was malloc() und free() machen und wie man damit umgeht. Wenn Du dann Personenelemente allokieren und wieder freigeben kannst, kommst Du wahrscheinlich sehr schnell von alleine drauf, wie Du die "next"-Zeiger der einzelnen Personenelemente setzen ("verketten") mußt, damit eine Liste draus wird.
It's as simple as that. And remember, Beethoven wrote his first symphony in C.