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