This commit is contained in:
Lennart Pecher 2025-05-23 12:49:06 +02:00
parent 8705b7b629
commit 5572368006

141
listmisc.c Normal file
View File

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