This commit is contained in:
Daniel Zwanzig 2025-05-14 18:30:00 +02:00
parent 2c4163b42a
commit dc67ce69c4

150
doppsort.c Normal file
View File

@ -0,0 +1,150 @@
/*#include <stdio.h>
#include <string.h>
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 <stdio.h>
#include <stdlib.h>
#include <string.h>
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;
}