164 lines
4.4 KiB
C
164 lines
4.4 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
typedef struct Eintrag
|
|
{
|
|
char name[25];
|
|
char tel[15];
|
|
struct Eintrag *naechster_Name;
|
|
struct Eintrag *naechste_Tel;
|
|
struct Eintrag *vorheriger_Name;
|
|
struct Eintrag *vorheriger_Tel;
|
|
} Eintrag;
|
|
|
|
|
|
void einfuegen(Eintrag **Anfang_Name, Eintrag **Anfang_Tel, char name[], char tel[])
|
|
{
|
|
Eintrag *neuerEintrag = (Eintrag *)malloc(sizeof(Eintrag));
|
|
strcpy(neuerEintrag->name, name);
|
|
strcpy(neuerEintrag->tel, tel);
|
|
neuerEintrag->naechster_Name = NULL;
|
|
neuerEintrag->naechste_Tel = NULL;
|
|
|
|
Eintrag *aktuellerEintrag_Name = *Anfang_Name;
|
|
Eintrag *vorherigerEintrag_Name = NULL;
|
|
|
|
while (aktuellerEintrag_Name != NULL && strcmp(aktuellerEintrag_Name->name, neuerEintrag->name) < 0)
|
|
{
|
|
vorherigerEintrag_Name = aktuellerEintrag_Name;
|
|
aktuellerEintrag_Name = aktuellerEintrag_Name->naechster_Name;
|
|
}
|
|
if (vorherigerEintrag_Name == NULL)
|
|
{
|
|
neuerEintrag->naechster_Name = *Anfang_Name;
|
|
*Anfang_Name = neuerEintrag;
|
|
}
|
|
else
|
|
{
|
|
neuerEintrag->naechster_Name = aktuellerEintrag_Name;
|
|
vorherigerEintrag_Name->naechster_Name = neuerEintrag;
|
|
}
|
|
if (neuerEintrag->naechster_Name != NULL)
|
|
{
|
|
neuerEintrag->naechster_Name->vorheriger_Name = neuerEintrag;
|
|
}
|
|
Eintrag *aktuellerEintrag_tel = *Anfang_Tel;
|
|
Eintrag *vorherigerEintrag_tel = NULL;
|
|
|
|
while (aktuellerEintrag_tel != NULL && strcmp(aktuellerEintrag_tel->tel, neuerEintrag->tel) < 0)
|
|
{
|
|
vorherigerEintrag_tel = aktuellerEintrag_tel;
|
|
aktuellerEintrag_tel = aktuellerEintrag_tel->naechste_Tel;
|
|
}
|
|
if (vorherigerEintrag_tel == NULL)
|
|
{
|
|
neuerEintrag->naechste_Tel = *Anfang_Tel;
|
|
*Anfang_Tel = neuerEintrag;
|
|
}
|
|
else
|
|
{
|
|
neuerEintrag->naechste_Tel = aktuellerEintrag_tel;
|
|
vorherigerEintrag_tel->naechste_Tel = neuerEintrag;
|
|
}
|
|
|
|
if (neuerEintrag->naechste_Tel != NULL)
|
|
{
|
|
neuerEintrag->naechste_Tel->vorheriger_Tel = neuerEintrag;
|
|
}
|
|
}
|
|
|
|
void ausgebenNachName(Eintrag *Anfang_Name)
|
|
{
|
|
printf("....Liste nach Namen sortiert..........\n");
|
|
while (Anfang_Name != NULL)
|
|
{
|
|
printf("%s \t (Tel. %s)\n", Anfang_Name->name, Anfang_Name->tel);
|
|
Anfang_Name = Anfang_Name->naechster_Name;
|
|
}
|
|
}
|
|
|
|
void ausgebenNachTel(Eintrag *Anfang_Tel)
|
|
{
|
|
printf("....Liste nach Telefonnummern sortiert..........\n");
|
|
|
|
while (Anfang_Tel != NULL)
|
|
{
|
|
printf("(Tel. %s) \t %s\n", Anfang_Tel->tel, Anfang_Tel->name);
|
|
Anfang_Tel = Anfang_Tel->naechste_Tel;
|
|
}
|
|
|
|
printf("\n");
|
|
}
|
|
|
|
void speicherfreigeben(Eintrag *Anfang_Name)
|
|
{
|
|
Eintrag *aktuellerEintrag = Anfang_Name;
|
|
Eintrag *naechsterEintrag;
|
|
|
|
while (aktuellerEintrag != NULL)
|
|
{
|
|
naechsterEintrag = aktuellerEintrag->naechster_Name;
|
|
free(aktuellerEintrag);
|
|
aktuellerEintrag = naechsterEintrag;
|
|
}
|
|
}
|
|
|
|
int main()
|
|
{
|
|
struct Eintrag *head_name = NULL;
|
|
struct Eintrag *head_telefon = NULL;
|
|
|
|
char name[50];
|
|
char telefonnummer[15];
|
|
char eingabe;
|
|
|
|
do
|
|
{
|
|
printf("Namens- und Telefonliste\n");
|
|
printf("========================\n");
|
|
printf("N Einfügen neuer Namen mit Telefonnummer\n");
|
|
printf("A Ausgeben der Liste\n");
|
|
printf("E Ende Deine Wahl: ");
|
|
if (scanf(" %c", &eingabe) != 1)
|
|
{
|
|
return 0;
|
|
}
|
|
getchar();
|
|
|
|
if (eingabe == 'N' || eingabe == 'n')
|
|
{
|
|
while (1)
|
|
{
|
|
printf("Name: ");
|
|
fgets(name, sizeof(name), stdin);
|
|
if (name[0] == '\n')
|
|
{
|
|
break;
|
|
}
|
|
if (name[strlen(name) - 1] == '\n')
|
|
{
|
|
name[strlen(name) - 1] = '\0';
|
|
}
|
|
printf("Tel: ");
|
|
fgets(telefonnummer, sizeof(telefonnummer), stdin);
|
|
if (telefonnummer[strlen(telefonnummer) - 1] == '\n')
|
|
{
|
|
telefonnummer[strlen(telefonnummer) - 1] = '\0';
|
|
}
|
|
einfuegen(&head_name, &head_telefon, name, telefonnummer);
|
|
}
|
|
}
|
|
|
|
if (eingabe == 'A' || eingabe == 'a')
|
|
{
|
|
ausgebenNachName(head_name);
|
|
ausgebenNachTel(head_telefon);
|
|
}
|
|
printf("\n");
|
|
|
|
} while (eingabe != 'E' && eingabe != 'e');
|
|
|
|
return 0;
|
|
}
|