diff --git a/treeset/Makefile b/treeset/Makefile new file mode 100644 index 0000000..6dae1fd --- /dev/null +++ b/treeset/Makefile @@ -0,0 +1,14 @@ +CC = gcc +CFLAGS = -Wall -O2 + +TARGET = main.elf +SRC = main.c treeset.c + +#LDFLAGS = + +$(TARGET): $(SRC) + @echo CC $@ + @$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) + +clean: + rm -f $(TARGET) diff --git a/treeset/main.c b/treeset/main.c new file mode 100644 index 0000000..34517c4 --- /dev/null +++ b/treeset/main.c @@ -0,0 +1,7 @@ +#include "treeset.h" +#include + +int main() { + treeset_t tree = {}; + return 0; +} diff --git a/treeset/treeset.c b/treeset/treeset.c new file mode 100644 index 0000000..7f0aba6 --- /dev/null +++ b/treeset/treeset.c @@ -0,0 +1,25 @@ +#include "treeset.h" +#include +#include + +struct treeset_node { + void *data; + struct treeset_node *left; + struct treeset_node *right; +}; + +struct treeset { + treeset_node_t *root; + size_t node_count; +}; + +void ts_node_destroy(treeset_node_t *n) { + if (n->left != NULL) + ts_node_destroy((treeset_node_t *)n->left); + if (n->right != NULL) + ts_node_destroy((treeset_node_t *)n->left); + + free(n); +} + +void treeset_destroy(treeset_t *set) { ts_node_destroy(set->root); } diff --git a/treeset/treeset.h b/treeset/treeset.h new file mode 100644 index 0000000..59ef483 --- /dev/null +++ b/treeset/treeset.h @@ -0,0 +1,26 @@ +#pragma once + +#include + +typedef struct treeset treeset_t; +typedef struct treeset_node treeset_node_t; + +/* + * Cast a and b to your custom struct and return: + * 1 for greater than + * -1 for less than + * 0 for equal + */ +int treeset_demo_cmp(void *a, void *b) { + if (*((int *)a) > *((int *)a)) + return -1; + if (*((int *)a) < *((int *)a)) + return 1; + + return 0; +} + +void treeset_destroy(treeset_t *set); +void put(treeset_t *set, void *data, int (*cmp)(void *, void *)); +// contains +// remove