#include #include #include typedef struct eintrag { char name[50]; int telefon; struct eintrag *next_name; struct eintrag *next_tel; } Eintrag; void einfuegen(Eintrag **kopf_name, Eintrag **kopf_tel, char *name, int tel) { Eintrag *neu = malloc(sizeof(Eintrag)); strcpy(neu->name, name); neu->telefon = tel; neu->next_name = NULL; neu->next_tel = NULL; Eintrag **p = kopf_name; while (*p && strcmp((*p)->name, name) < 0) p = &(*p)->next_name; neu->next_name = *p; *p = neu; p = kopf_tel; while (*p && (*p)->telefon < tel) p = &(*p)->next_tel; neu->next_tel = *p; *p = neu; } void liste_name_ausgeben(Eintrag *kopf) { printf("\n...Liste nach Namen sortiert...\n"); while (kopf) { printf("%s (Tel.: %d)\n", kopf->name, kopf->telefon); kopf = kopf->next_name; } } void liste_tel_ausgeben(Eintrag *kopf) { printf("\n...Liste nach Telefonnummer sortiert...\n"); while (kopf) { printf("%d (%s)\n", kopf->telefon, kopf->name); kopf = kopf->next_tel; } } void speicher_freigeben(Eintrag *kopf) { Eintrag *temp; while (kopf) { temp = kopf->next_name; free(kopf); kopf = temp; } } int main() { Eintrag *kopf_name = NULL, *kopf_tel = NULL; char name[50]; char eingabe[100]; int tel; char wahl; printf("Namens- und Telefonliste\n"); printf("========================\n"); do { printf("\nN - Einfuegen neuer Namen mit Telefonnummer\n"); printf("A - Ausgeben der Liste\n"); printf("E - Ende\n"); printf("Deine Wahl:"); scanf("%c", &wahl); getchar(); switch (wahl) { case 'N': case 'n': while (1) { printf("Name:"); fgets(name, sizeof(name), stdin); name[strcspn(name, "\n")] = 0; if (strlen(name) == 0) break; printf("Tel:"); fgets(eingabe, sizeof(eingabe), stdin); tel = atoi(eingabe); einfuegen(&kopf_name, &kopf_tel, name, tel); } break; case 'A': case 'a': liste_name_ausgeben(kopf_name); liste_tel_ausgeben(kopf_tel); break; case 'E': case 'e': // Ende break; default: printf("Ungueltige Eingabe.\n"); } } while (wahl != 'E' && wahl != 'e'); speicher_freigeben(kopf_name); return 0; }