28.6.2
This commit is contained in:
parent
2c4163b42a
commit
dc67ce69c4
150
doppsort.c
Normal file
150
doppsort.c
Normal 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;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user