diff options
| author | Carlos Maiolino <[email protected]> | 2025-07-10 22:55:07 +0200 |
|---|---|---|
| committer | Carlos Maiolino <[email protected]> | 2025-07-10 22:56:55 +0200 |
| commit | d98f46ce647846b0aa30b2e16a30fd4e152a1bf5 (patch) | |
| tree | 267474fcc77cf20b428f6f4c7f768ca09f4cfe0e /BTree | |
| parent | 869e68986aa8f69af6e7842260a68d1e5c6f796f (diff) | |
Add new code
Signed-off-by: Carlos Maiolino <[email protected]>
Diffstat (limited to 'BTree')
| -rw-r--r-- | BTree/Makefile | 6 | ||||
| -rw-r--r-- | BTree/bt_data.c | 51 | ||||
| -rw-r--r-- | BTree/bt_data.h | 4 | ||||
| -rw-r--r-- | BTree/bt_main.c | 63 | ||||
| -rw-r--r-- | BTree/btree.c | 65 | ||||
| -rw-r--r-- | BTree/btree.h | 43 |
6 files changed, 232 insertions, 0 deletions
diff --git a/BTree/Makefile b/BTree/Makefile new file mode 100644 index 0000000..def2945 --- /dev/null +++ b/BTree/Makefile @@ -0,0 +1,6 @@ +btree: bt_main.o bt_data.o btree.o + gcc -Wall -o btree bt_main.o bt_data.o btree.o -I. + +clean: + rm -f *.o + rm btree diff --git a/BTree/bt_data.c b/BTree/bt_data.c new file mode 100644 index 0000000..c10ce3d --- /dev/null +++ b/BTree/bt_data.c @@ -0,0 +1,51 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include "btree.h" + +struct Data * init_item(int id, char *name) +{ + struct Data *new = malloc(sizeof(struct Data)); + + if (new == NULL) + return new; + + new->id = id; + strncpy(new->name, name, 20); + + /* Ensure string is null terminated */ + new->name[19] = '\0'; + + return new; +} + +void destroy_item(struct Data *item) +{ + if (item) + free(item); +} + +/* Insert new item in the tree */ +void add_item(void) +{ + char name[20]; + int id; + struct Data *item; + + printf("Name: "); + scanf(" %s", name); + printf("Id: "); + scanf(" %d", &id); + + item = init_item(id, name); + + if (!item) { + printf("Error adding new data\n"); + return; + } + + if (!btree_add(item)) + printf("Btree Error: Failed to add item\n"); + + return; +} diff --git a/BTree/bt_data.h b/BTree/bt_data.h new file mode 100644 index 0000000..97ca893 --- /dev/null +++ b/BTree/bt_data.h @@ -0,0 +1,4 @@ +struct Data * init_item(int id, char *name); +void destroy_item(struct Data *item); + +void add_item(void); diff --git a/BTree/bt_main.c b/BTree/bt_main.c new file mode 100644 index 0000000..939a0c5 --- /dev/null +++ b/BTree/bt_main.c @@ -0,0 +1,63 @@ +#include <stdio.h> +#include <stdlib.h> +#include "btree.h" +#include "bt_data.h" + +void init_interface(void) +{ + while (1) { + char op; + + system("clear"); + printf("Please, select an option:\n"); + printf("1: add new item\n" + "2: delete item\n" + "3: search item\n" + "4: Dump Tree\n" + "5: Quit\n"); + printf("Enter your option: "); + scanf(" %c", &op); + + switch(atoi(&op)) { + case 1: + add_item(); + break; + case 2: + btree_delete(); + break; + case 3: + btree_search(); + break; + case 4: + btree_dump(); + break; + case 5: + goto out; + default: + usage(); + break; + } + } +out: + return; +} +int main(void) +{ + struct BTree_head *head; + + /* Initialize BTree Head */ + head = init_head(); + + if (!head) { + printf("Unable to initialize BTree head\n"); + goto exit_error; + } + + init_interface(); + + destroy_head(head); + return 0; + +exit_error: + exit(1); +} diff --git a/BTree/btree.c b/BTree/btree.c new file mode 100644 index 0000000..3066829 --- /dev/null +++ b/BTree/btree.c @@ -0,0 +1,65 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include "btree.h" + +struct BTree_head * init_head(void) +{ + struct BTree_head *head = malloc(sizeof(struct BTree_head)); + + if (head == NULL) + return NULL; + + head->root = NULL; + head->height = 0; + head->order = 0; + head->num_recs = 0; + + return head; +} + +void destroy_head(struct BTree_head *head) +{ + free(head); +} + +struct BTree_node * new_node(void) +{ + struct BTree_node *new = malloc(sizeof(struct BTree_node)); + + if (new != NULL) + memset(new, 0, sizeof(struct BTree_node)); + + return new; +} + +void destroy_node(struct BTree_node *node) +{ + if (node) + free(node); +} + +int btree_add(struct Data *item) +{ + return 0; +} + +int btree_delete(void) +{ + return 0; +} + +int btree_search(void) +{ + return 0; +} + +int btree_dump(void) +{ + return 0; +} + +void usage(void) +{ + return; +} diff --git a/BTree/btree.h b/BTree/btree.h new file mode 100644 index 0000000..0acdb15 --- /dev/null +++ b/BTree/btree.h @@ -0,0 +1,43 @@ +#include <sys/types.h> +#include <stdbool.h> +#include <unistd.h> + +/* Hardcoded BTree order */ +#define BT_ORDER 3 + +/* Btree is an index of this structure */ +struct Data { + int id; + char name[20]; +}; + +struct BTree_node { + bool is_leaf; /* Is this a leaf block? */ + int num_recs; + int key_idx[BT_ORDER]; + + /* Points to next level when node or to data when leaf */ + void *ptrs[BT_ORDER]; +}; + +struct BTree_head { + struct BTree_node *root; /* root pointer */ + unsigned int height; /* How many levels? */ + unsigned int order; /* BTree order */ + unsigned int num_recs; /* num of entrys in the tree */ +}; + +struct BTree_head * init_head(void); +void destroy_head(struct BTree_head *head); + +/* + * BTree Operations: + * + * All operations Return 0 for success, non zero otherwise + * + */ +int btree_add(struct Data* item); +int btree_delete(void); +int btree_search(void); +int btree_dump(void); +void usage(void); |
