diff --git a/listmisc.c b/listmisc.c new file mode 100644 index 0000000..48cffa5 --- /dev/null +++ b/listmisc.c @@ -0,0 +1,141 @@ + +#include +#include +#include +#define SIZE_NAME 100 + +typedef struct knotenNamensliste { + char name[SIZE_NAME]; + struct knotenNamensliste* next; + struct knotenNamensliste* prev; +} knotenNamensliste_t; + +knotenNamensliste_t* neuenKnotenErstellen(char *aktuellerName) { + knotenNamensliste_t *neuerKnoten = (knotenNamensliste_t*)malloc(sizeof(knotenNamensliste_t)); + if (neuerKnoten == NULL) { + printf("Speicher konnte nicht zugewiesen werden!\n"); + return NULL; + } + strncpy(neuerKnoten->name, aktuellerName, SIZE_NAME - 1); + neuerKnoten->prev = NULL; + neuerKnoten->next = NULL; + + return neuerKnoten; +} + + +int namenEinlesen(char *aktuellerName) { + printf("Name (Leere Eingabe zum Beenden):\t"); + if (fgets(aktuellerName, SIZE_NAME, stdin) != NULL) { + int laenge = strlen(aktuellerName); + if (aktuellerName[laenge-1] == '\n') { + aktuellerName[laenge-1] = '\0'; + } + + if (strlen(aktuellerName) == 0) { + return 0; + } + return 1; + } + return 0; +} + +int wahlListe() { + int wahl; + printf("Welche Liste (1 oder 2):\t"); + scanf("%d", &wahl); + while (getchar() != '\n'); + return wahl; +} + +void listeSortieren(knotenNamensliste_t **listeHead, char *aktuellerName) { + + knotenNamensliste_t *neuerKnoten = neuenKnotenErstellen(aktuellerName); + + knotenNamensliste_t *temp = *listeHead; + + //Überprüfung ob Name bereits vorhanden + while (temp != NULL) { + if (strcmp(temp->name, aktuellerName) == 0) { + free(neuerKnoten); + return; + } + temp = temp->next; + } + + + if (*listeHead == NULL) { + *listeHead = neuerKnoten; + } else { + temp = *listeHead; + + //Alphabetische Sortierung + while (temp->next != NULL && strcmp(temp->name, aktuellerName) < 0) { + temp = temp->next; + } + + + if (strcmp(temp->name, aktuellerName) > 0) { + + neuerKnoten->next = temp; + neuerKnoten->prev = temp->prev; + if (temp->prev != NULL) { + temp->prev->next = neuerKnoten; + } else { + *listeHead = neuerKnoten; + } + temp->prev = neuerKnoten; + } else { + + temp->next = neuerKnoten; + neuerKnoten->prev = temp; + } + } +} + + + +void ausgabeListe(knotenNamensliste_t *listeHead) { + knotenNamensliste_t *temp = listeHead; + while (temp != NULL) { + printf("Name: %s\n", temp->name); + temp = temp->next; + } +} + +int main() { + knotenNamensliste_t *listeGemischtHead = NULL; + knotenNamensliste_t *listeEinsHead = NULL; + knotenNamensliste_t *listeZweiHead = NULL; + char aktuellerName[SIZE_NAME]; + + while (namenEinlesen(aktuellerName) == 1) { + int listeZuweisen = wahlListe(); + if (listeZuweisen == 1) { + listeSortieren(&listeEinsHead, aktuellerName); + } else if (listeZuweisen == 2) { + listeSortieren(&listeZweiHead, aktuellerName); + } + + listeSortieren(&listeGemischtHead, aktuellerName); + } + + printf("Liste 1:\n"); + ausgabeListe(listeEinsHead); + printf("Liste 2:\n"); + ausgabeListe(listeZweiHead); + printf("Liste gemischt:\n"); + ausgabeListe(listeGemischtHead); + + return 0; +} + + +// +// Created by Lennart Pecher on 23.05.25. +// + + +// +// Created by Lennart Pecher on 23.05.25. +//