From dc67ce69c4afa3523f6ffcf5df155d2c08045123 Mon Sep 17 00:00:00 2001 From: Daniel Date: Wed, 14 May 2025 18:30:00 +0200 Subject: [PATCH] 28.6.2 --- doppsort.c | 150 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 doppsort.c diff --git a/doppsort.c b/doppsort.c new file mode 100644 index 0000000..586ea4e --- /dev/null +++ b/doppsort.c @@ -0,0 +1,150 @@ +/*#include +#include + +struct Node{ + char *name; + unsigned nummer; + struct Node* next; +}; + + +int main(){ + char auswahl; + char test[100]; + + scanf("%[^\n]", &test[0]); + + + printf("Namens- und Telefonliste\n"); + printf("========================\n"); + printf("N\tEinfuegen neuer Namen mit Telefonnummer\n"); + printf("A\tAusgeben der Liste\n"); + printf("E\tEnde\n"); + printf("Deine Wahl:"); + auswahl = getchar(); + }*/ + + +#include +#include +#include + +typedef struct eintrag { + char name[50]; + int telefon; + struct eintrag *next_name; + struct eintrag *next_tel; +} Eintrag; + +// Eintrag in beide Listen einfügen +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; + + // Einfügen nach Namen sortiert + Eintrag **p = kopf_name; + while (*p && strcmp((*p)->name, name) < 0) + p = &(*p)->next_name; + neu->next_name = *p; + *p = neu; + + // Einfügen nach Telefonnummer sortiert + p = kopf_tel; + while (*p && (*p)->telefon < tel) + p = &(*p)->next_tel; + neu->next_tel = *p; + *p = neu; +} + +// Ausgabe nach Namen sortiert +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; + } +} + +// Ausgabe nach Telefonnummer sortiert +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; + } +} + +// Speicher am Ende freigeben +void speicher_freigeben(Eintrag *kopf) { + Eintrag *temp; + while (kopf) { + temp = kopf->next_name; // nur eine Liste reicht zum Freigeben + 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(); // '\n' entfernen + + switch (wahl) { + case 'N': + case 'n': + while (1) { + printf("Name:"); + fgets(name, sizeof(name), stdin); + name[strcspn(name, "\n")] = 0; // Zeilenumbruch entfernen + + 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 aufräumen + speicher_freigeben(kopf_name); + + return 0; +} + +