#include "namesarchive.h" #include #include #include 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; } */