Skip to content
Snippets Groups Projects
Commit 3ef0967e authored by Florian Burgener's avatar Florian Burgener
Browse files

Start of the implementation in C

parent af264f7e
No related branches found
No related tags found
No related merge requests found
...@@ -83,8 +83,11 @@ def node_is_full(node): ...@@ -83,8 +83,11 @@ def node_is_full(node):
def redistribute_keys(left_node, right_node, left_index, right_index): def redistribute_keys(left_node, right_node, left_index, right_index):
right_node.keys = left_node.keys[right_index:] for i in range(right_index, len(left_node.keys)):
left_node.keys = left_node.keys[:left_index] 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): def split_leaf(node, key):
...@@ -477,7 +480,6 @@ def main(): ...@@ -477,7 +480,6 @@ def main():
bptree_delete(root, 47) bptree_delete(root, 47)
# bptree_delete(root, 65) # bptree_delete(root, 65)
bptree_print(root) bptree_print(root)
......
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}*
#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;
}
File added
File added
#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;
}
#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
File added
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment