aboutsummaryrefslogtreecommitdiff
path: root/sem1/algo/mm6
diff options
context:
space:
mode:
authorJulian T <julian@jtle.dk>2020-02-11 12:24:56 +0100
committerJulian T <julian@jtle.dk>2020-02-11 12:24:56 +0100
commit6db1a2cdd3b96731f2e092d55d8c2136eabc52d0 (patch)
tree2be8fae8ce82d708ed9f00f376dda14420850e80 /sem1/algo/mm6
parent57305119e05559c1c37e903aef89cd43f44c42c9 (diff)
Rename and cleanup
Diffstat (limited to 'sem1/algo/mm6')
-rw-r--r--sem1/algo/mm6/Makefile31
-rwxr-xr-xsem1/algo/mm6/mainbin23144 -> 0 bytes
-rw-r--r--sem1/algo/mm6/main.c37
-rw-r--r--sem1/algo/mm6/tree.c155
-rw-r--r--sem1/algo/mm6/tree.h31
5 files changed, 0 insertions, 254 deletions
diff --git a/sem1/algo/mm6/Makefile b/sem1/algo/mm6/Makefile
deleted file mode 100644
index c157cef..0000000
--- a/sem1/algo/mm6/Makefile
+++ /dev/null
@@ -1,31 +0,0 @@
-CC = gcc
-# Enable gdb and pull include files from current dir
-CFLAGS = -ggdb -I.
-LDFLAGS =
-
-BINARY = main
-BUILD_DIR = build
-
-# Capture c files
-c_files = $(wildcard *.c)
-
-# Convert c names to corrosponding o names
-OBJ = $(patsubst %.c, $(BUILD_DIR)/%.o, $(c_files))
-
-# $@ is the %.o file and $^ is the %.c file
-$(BUILD_DIR)/%.o: %.c
- mkdir -p $(dir $@)
- $(CC) -c -o $@ $^ $(CFLAGS)
-
-# $@ becomes left part thus linked
-$(BINARY): $(OBJ)
- $(CC) -o $@ $^ $(LDFLAGS)
-
-.PHONY: clean run
-
-run: $(BINARY)
- ./$(BINARY)
-
-clean:
- rm -f $(OBJ) $(BINARY)
- rmdir $(BUILD_DIR)
diff --git a/sem1/algo/mm6/main b/sem1/algo/mm6/main
deleted file mode 100755
index c666ee9..0000000
--- a/sem1/algo/mm6/main
+++ /dev/null
Binary files differ
diff --git a/sem1/algo/mm6/main.c b/sem1/algo/mm6/main.c
deleted file mode 100644
index abc8d02..0000000
--- a/sem1/algo/mm6/main.c
+++ /dev/null
@@ -1,37 +0,0 @@
-#include <stdio.h>
-
-#include "tree.h"
-
-int main() {
- tree_t t;
- t.root = 0;
-
- node_t *a = tree_insert(&t, 1, "Hej");
-
- node_t *b = tree_insert(&t, 3, "med");
-
- tree_insert(&t, 11, "dig");
- tree_insert(&t, 9, "dig");
- tree_insert(&t, 12, "dig");
-
- tree_insert(&t, 10, "hvordan");
-
- tree_insert(&t, 8, "det");
-
- tree_insert(&t, 4, "branch");
-
- tree_insert(&t, 5, "2");
-
-
- tree_insert(&t, 0, "Og den sidste");
-
- tree_insert(&t, 2, "Cool nok");
- tree_print(&t);
-
- printf("%s\n", tree_search(&t, 10));
- printf("%s\n", tree_search(&t, 11));
- printf("%s\n", tree_search(&t, 1));
- printf("%s\n", tree_search(&t, 0));
- printf("%s\n", tree_search(&t, 99));
-
-}
diff --git a/sem1/algo/mm6/tree.c b/sem1/algo/mm6/tree.c
deleted file mode 100644
index 47378f3..0000000
--- a/sem1/algo/mm6/tree.c
+++ /dev/null
@@ -1,155 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "tree.h"
-
-static node_t *create_node(unsigned int index, char *val) {
- node_t *node = malloc( sizeof(node_t) );
- memset(node, 0, sizeof(node_t));
-
- node->value = val;
- node->index = index;
-}
-
-/* Comments are based of dir = CHILD_LEFT */
-void node_rotate(tree_t *tree, node_t *x, int dir) {
- /* Node below which we should rotate with */
- node_t *y = x->children[!dir];
-
- /* Move y's left to x's right */
- x->children[!dir] = y->children[dir];
-
- /* Update parent */
- if( y->children[dir] ) {
- y->children[dir]->p = x;
- }
-
- /* Switch around x and y */
- y->p = x->p;
-
- /* Check if y is new root if not update x's parent */
- if( !y->p ) {
- tree->root = y;
- } else if( x == x->p->children[CHILD_LEFT]) {
- x->p->children[CHILD_LEFT] = y;
- } else {
- x->p->children[CHILD_RIGHT] = y;
- }
-
- /* Update y's ref */
- y->children[dir] = x;
- x->p = y;
-
-}
-
-static void insert_fixup(tree_t *tree, node_t *z) {
- while( z->p && z->p->black == false ) {
- /* Set the right direction */
- int dir = (z->p == z->p->p->children[CHILD_LEFT]) ? CHILD_RIGHT : CHILD_LEFT;
-
- /* Get uncle */
- node_t *y = z->p->p->children[dir];
- if( y && !y->black ) {
- /* Case 1 */
- z->p->black = true;
- y->black = true;
- z->p->p->black = false;
-
- z = z->p->p;
- } else if( z == z->p->children[dir] ) {
- /* Case 2 */
- z = z->p;
- node_rotate(tree, z, !dir);
- } else {
- /* Case 3 */
- z->p->black = true;
- z->p->p->black = false;
- node_rotate(tree, z->p->p, dir);
- }
- }
-
- tree->root->black = true;
-
-}
-
-static node_t *insert_recur(node_t *node, unsigned int index, char *val) {
- int dir = node->index < index ? CHILD_RIGHT : CHILD_LEFT;
-
- if( node->children[dir] ) {
- return insert_recur(node->children[dir], index, val);
- }
-
- /* Found stop */
- node_t *new = create_node(index, val);
- new->p = node;
- node->children[dir] = new;
-
- return new;
-}
-
-node_t *tree_insert_pleb(tree_t *tree, unsigned int index, char *val) {
- if( !tree->root ) {
- tree->root = create_node(index, val);
- return tree->root;
- }
-
- return insert_recur(tree->root, index, val);
-}
-
-node_t *tree_insert(tree_t *tree, unsigned int index, char *val) {
- if( !tree->root ) {
- tree->root = create_node(index, val);
- tree->root->black = true;
- return tree->root;
- }
-
- node_t *new = insert_recur(tree->root, index, val);
- insert_fixup(tree, new);
-
- return new;
-}
-
-char *tree_search(tree_t *tree, unsigned int index) {
- node_t *z = tree->root;
- while( z->index != index ) {
- z = z->children[z->index < index ? CHILD_RIGHT : CHILD_LEFT];
- if( !z ) {
- return NULL;
- }
- }
-
- return z->value;
-}
-
-static inline void print_indent(int num) {
- for( int i = 0; i < num; i++ ) {
- printf(" ");
- }
-}
-
-static inline void print_text(node_t *node, bool bold) {
- if( bold ) {
- printf("\033[1m%d\033[22m\n", node->index);
- } else {
- printf("%d\n", node->index);
- }
-
-}
-
-static void print_recur(node_t *node, int ident) {
- if( !node ) {
- return;
- }
- print_recur(node->children[CHILD_RIGHT], ident+1);
-
- print_indent(ident);
- print_text(node, node->black);
-
- print_recur(node->children[CHILD_LEFT], ident+1);
-}
-
-void tree_print(tree_t *tree) {
- print_recur(tree->root, 0);
-}
-
diff --git a/sem1/algo/mm6/tree.h b/sem1/algo/mm6/tree.h
deleted file mode 100644
index 0d1c5c6..0000000
--- a/sem1/algo/mm6/tree.h
+++ /dev/null
@@ -1,31 +0,0 @@
-#ifndef TREE_H
-#define TREE_H
-
-#include <stdbool.h>
-
-#define CHILD_LEFT 0
-#define CHILD_RIGHT 1
-
-typedef struct node_struct{
- struct node_struct *p;
- struct node_struct *children[2];
- unsigned int index;
- bool black;
- char *value;
-} node_t;
-
-typedef struct {
- node_t *root;
-} tree_t;
-
-void tree_print(tree_t *tree);
-
-node_t *tree_insert(tree_t *tree, unsigned int index, char *val);
-node_t *tree_insert_pleb(tree_t *tree, unsigned int index, char *val);
-
-void node_rotate(tree_t *tree, node_t *x, int dir);
-
-char *tree_search(tree_t *tree, unsigned int index);
-
-
-#endif