info2_uebungen/09_bst/namesarchive.c
2025-12-04 13:46:24 +01:00

114 lines
2.0 KiB
C

#include "namesarchive.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
typedef struct node
{
char *name;
struct node *left;
struct node *right;
} Node;
static Node *root = NULL;
static Node *createNameNode(const char *name)
{
Node *newNode = NULL;
if(name != NULL)
{
newNode = calloc(1, sizeof(Node));
if(newNode != NULL)
{
newNode->name = malloc(sizeof(char) * (strlen(name)+1));
if(newNode->name != NULL)
strcpy(newNode->name, name);
else
{
free(newNode);
newNode = NULL;
}
}
}
return newNode;
}
static Node *addNameRec(Node* root, const char *newName)
{
if(root == NULL)
root = createNameNode(newName);
else if(strcmp(newName, root->name) <= 0)
root->left = addNameRec(root->left, newName);
else
root->right = addNameRec(root->right, newName);
return root;
}
void addName(const char *name)
{
root = addNameRec(root, name);
}
static void printNamesRec(Node *root)
{
if(root != NULL)
{
printNamesRec(root->left);
printf("%s\n", root->name);
printNamesRec(root->right);
}
}
void printNames()
{
printNamesRec(root);
}
/*
static void disposeElem(QueueElem *elem)
{
if(elem != NULL)
free(elem->name);
free(elem);
}
static QueueElem *removeElemRek(QueueElem *elem, const char *name)
{
if(elem != NULL)
{
if(strcmp(elem->name, name) == 0)
{
QueueElem *elemToRemove = elem;
elem = elem->next;
disposeElem(elemToRemove);
}
else
elem->next = removeElemRek(elem->next, name);
}
return elem;
}
void removeName(const char *name)
{
head = removeElemRek(head, name);
}
static void clearElemRek(QueueElem *elem)
{
if(elem != NULL)
{
clearElemRek(elem->next);
disposeElem(elem);
}
}
void clearArchive()
{
clearElemRek(head);
head = NULL;
}
*/