From 3ef0967e31ea8d4ad885535839a925f282c7f2ff Mon Sep 17 00:00:00 2001 From: Florian Burgener <florian.brgnr@gmail.com> Date: Fri, 20 May 2022 23:11:08 +0200 Subject: [PATCH] Start of the implementation in C --- __main__.py | 8 +++-- src/Makefile | 24 +++++++++++++ src/bptree.h | 0 src/main.c | 29 ++++++++++++++++ src/main.o | Bin 0 -> 9296 bytes src/program | Bin 0 -> 29360 bytes src/sorted_array.c | 83 +++++++++++++++++++++++++++++++++++++++++++++ src/sorted_array.h | 15 ++++++++ src/sorted_array.o | Bin 0 -> 17424 bytes 9 files changed, 156 insertions(+), 3 deletions(-) create mode 100644 src/Makefile create mode 100644 src/bptree.h create mode 100644 src/main.c create mode 100644 src/main.o create mode 100644 src/program create mode 100644 src/sorted_array.c create mode 100644 src/sorted_array.h create mode 100644 src/sorted_array.o diff --git a/__main__.py b/__main__.py index ca8e13a..b369571 100644 --- a/__main__.py +++ b/__main__.py @@ -83,8 +83,11 @@ def node_is_full(node): def redistribute_keys(left_node, right_node, left_index, right_index): - right_node.keys = left_node.keys[right_index:] - left_node.keys = left_node.keys[:left_index] + for i in range(right_index, len(left_node.keys)): + right_node.keys.append(left_node.keys[i]) + + for i in range(left_index, len(left_node.keys)): + left_node.keys.pop() def split_leaf(node, key): @@ -477,7 +480,6 @@ def main(): bptree_delete(root, 47) # bptree_delete(root, 65) - bptree_print(root) diff --git a/src/Makefile b/src/Makefile new file mode 100644 index 0000000..2ab95ed --- /dev/null +++ b/src/Makefile @@ -0,0 +1,24 @@ +TARGET = program +LIBS = -lm +CC = gcc +CFLAGS = -g -Wall -Wextra -pedantic -Ofast +# CFLAGS += -fsanitize=address -fsanitize=leak + +.PHONY: default all clean + +default: $(TARGET) +all: default + +OBJECTS = $(patsubst %.c, %.o, $(wildcard *.c)) +HEADERS = $(wildcard *.h) + +%.o: %.c $(HEADERS) + $(CC) $(CFLAGS) -c $< -o $@ + +.PRECIOUS: $(TARGET) $(OBJECTS) + +$(TARGET): $(OBJECTS) + $(CC) $(OBJECTS) ${CFLAGS} $(LIBS) -o $@ + +clean: + rm -f *.o ${TARGET}* diff --git a/src/bptree.h b/src/bptree.h new file mode 100644 index 0000000..e69de29 diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..3da830e --- /dev/null +++ b/src/main.c @@ -0,0 +1,29 @@ +#include <stdio.h> +#include <stdlib.h> + +#include "sorted_array.h" + +int main() { + int *array = (int *)malloc(sizeof(int) * 10); + int array_length = 0; + + sorted_array_insert(array, &array_length, 3); + sorted_array_insert(array, &array_length, 11); + sorted_array_insert(array, &array_length, 5); + sorted_array_insert(array, &array_length, 1); + sorted_array_insert(array, &array_length, 15); + sorted_array_insert(array, &array_length, 12); + sorted_array_insert(array, &array_length, 8); + sorted_array_print(array, array_length); + + sorted_array_delete(array, &array_length, 12); + sorted_array_delete(array, &array_length, 1); + sorted_array_delete(array, &array_length, 15); + sorted_array_delete(array, &array_length, 5); + sorted_array_delete(array, &array_length, 8); + sorted_array_delete(array, &array_length, 11); + sorted_array_delete(array, &array_length, 3); + sorted_array_print(array, array_length); + + return EXIT_SUCCESS; +} diff --git a/src/main.o b/src/main.o new file mode 100644 index 0000000000000000000000000000000000000000..430793ffa0d07259fdf13973a75857418dc744d3 GIT binary patch literal 9296 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 literal 0 HcmV?d00001 diff --git a/src/program b/src/program new file mode 100644 index 0000000000000000000000000000000000000000..d77345c41e98d225093d0a372100bb75b4155945 GIT binary patch literal 29360 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 literal 0 HcmV?d00001 diff --git a/src/sorted_array.c b/src/sorted_array.c new file mode 100644 index 0000000..0fc9d91 --- /dev/null +++ b/src/sorted_array.c @@ -0,0 +1,83 @@ +#include "sorted_array.h" + +#include <stdbool.h> +#include <stdio.h> +#include <stdlib.h> + +int lower_bound(int *array, int array_length, int value) { + int low = 0; + int high = array_length - 1; + + while (low <= high) { + int m = (low + high) / 2; + + if (array[m] < value) { + low = m + 1; + } else if (array[m] > value) { + high = m - 1; + } else { + return m; + } + } + + return low; +} + +int sorted_array_find_index(int *array, int array_length, int value) { + int low = 0; + int high = array_length - 1; + + while (low <= high) { + int m = (low + high) / 2; + + if (array[m] < value) { + low = m + 1; + } else if (array[m] > value) { + high = m - 1; + } else { + return m; + } + } + + return -1; +} + +bool sorted_array_search(int *array, int array_length, int value, int *index) { + int i = sorted_array_find_index(array, array_length, value); + + if (index != NULL) { + *index = i; + } + + return i != -1; +} + +void sorted_array_print(int *array, int array_length) { + for (int i = 0; i < array_length; i++) { + printf("%d ", array[i]); + } + + printf("\n"); +} + +int sorted_array_insert(int *array, int *array_length, int value) { + int index = lower_bound(array, *array_length, value); + + for (int i = *array_length - 1; i >= index; i--) { + array[i + 1] = array[i]; + } + + array[index] = value; + *array_length += 1; + return index; +} + +void sorted_array_delete(int *array, int *array_length, int value) { + int index = sorted_array_find_index(array, *array_length, value); + + for (int i = index; i < *array_length; i++) { + array[i] = array[i + 1]; + } + + *array_length -= 1; +} diff --git a/src/sorted_array.h b/src/sorted_array.h new file mode 100644 index 0000000..e108832 --- /dev/null +++ b/src/sorted_array.h @@ -0,0 +1,15 @@ +#ifndef SORTED_ARRAY_H +#define SORTED_ARRAY_H + +#include <stdbool.h> + +int lower_bound(int *array, int array_length, int value); + +int sorted_array_find_index(int *array, int array_length, int value); +bool sorted_array_search(int *array, int array_length, int value, int *index); +void sorted_array_print(int *array, int array_length); + +int sorted_array_insert(int *array, int *array_length, int value); +void sorted_array_delete(int *array, int *array_length, int value); + +#endif diff --git a/src/sorted_array.o b/src/sorted_array.o new file mode 100644 index 0000000000000000000000000000000000000000..b5cdc315a1c1cef35f42c2424ca12b6288091a13 GIT binary patch literal 17424 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 K{pkKj*AD=P8M!3@ literal 0 HcmV?d00001 -- GitLab