Treeset skeleton

This commit is contained in:
Imbus 2025-06-25 09:31:46 +02:00
parent f34dfcdccd
commit b0d86c7e2c
4 changed files with 72 additions and 0 deletions

14
treeset/Makefile Normal file
View file

@ -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)

7
treeset/main.c Normal file
View file

@ -0,0 +1,7 @@
#include "treeset.h"
#include <stdio.h>
int main() {
treeset_t tree = {};
return 0;
}

25
treeset/treeset.c Normal file
View file

@ -0,0 +1,25 @@
#include "treeset.h"
#include <stdlib.h>
#include <string.h>
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); }

26
treeset/treeset.h Normal file
View file

@ -0,0 +1,26 @@
#pragma once
#include <stddef.h>
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