Began work on tree, but it is unfinished and full of errors.
This commit is contained in:
parent
9ba3b79962
commit
cac747f6f6
|
@ -0,0 +1,61 @@
|
||||||
|
/*
|
||||||
|
handytree.h
|
||||||
|
Created By:
|
||||||
|
Andrew Lalis (andrewlalisofficial@gmail.com)
|
||||||
|
02 October 2017
|
||||||
|
This file is free to use, as long as the above comment remains in the file.
|
||||||
|
Please contact the author regarding bugs and/or feature requests.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef TREE_TYPE
|
||||||
|
|
||||||
|
#include "templates.h"
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <assert.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
Tree:
|
||||||
|
A data structure in which each node has some child nodes, and data about itself. A tree has only one root node, can have a great number of leaf nodes.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
TREE_NODE: the tree type for a tree node.
|
||||||
|
*/
|
||||||
|
#define TREE_NODE TEMPLATE(TREE_TYPE,tree_node)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Tree structure:
|
||||||
|
Each tree node has some data, and a list of pointers to its child nodes, if any.
|
||||||
|
*/
|
||||||
|
typedef struct {
|
||||||
|
TREE_NODE** children;
|
||||||
|
int childCount;
|
||||||
|
TREE_TYPE data;
|
||||||
|
} TREE_NODE;
|
||||||
|
|
||||||
|
/*
|
||||||
|
Tree node creation:
|
||||||
|
Creates a new tree node, with some amount of child nodes, and data.
|
||||||
|
*/
|
||||||
|
TREE_NODE* TEMPLATE(new,TREE_NODE)(TREE_TYPE data, int childNum, ...){
|
||||||
|
TREE_NODE* node = malloc(sizeof(TREE_NODE));
|
||||||
|
assert(node != NULL);
|
||||||
|
node->data = data;
|
||||||
|
node->childCount = childNum;
|
||||||
|
if (childNum > 0){
|
||||||
|
va_list args;
|
||||||
|
va_start(args, childNum);
|
||||||
|
node->children = malloc(childNum*sizeof(TREE_NODE*));
|
||||||
|
assert(node->children != NULL);
|
||||||
|
for (int i = 0; i < childNum; i++){
|
||||||
|
node->children[i] = va_arg(args, TREE_NODE*);
|
||||||
|
}
|
||||||
|
va_end(args);
|
||||||
|
}
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
5
test.c
5
test.c
|
@ -11,6 +11,9 @@
|
||||||
#define QUEUE_TYPE int
|
#define QUEUE_TYPE int
|
||||||
#include "source/handyqueue.h"
|
#include "source/handyqueue.h"
|
||||||
|
|
||||||
|
#define TREE_TYPE char
|
||||||
|
#include "source/handytree.h"
|
||||||
|
|
||||||
void printList(float_list* list){
|
void printList(float_list* list){
|
||||||
int size = size_float_list(list);
|
int size = size_float_list(list);
|
||||||
for (int i = 0; i < size; i++){
|
for (int i = 0; i < size; i++){
|
||||||
|
@ -44,4 +47,6 @@ int main(int argc, char* argv[]){
|
||||||
printf("First Item in queue: %d\n", dequeue_int_queue(&q));
|
printf("First Item in queue: %d\n", dequeue_int_queue(&q));
|
||||||
free_int_queue(q);
|
free_int_queue(q);
|
||||||
|
|
||||||
|
char_tree_node root = new_char_tree_node('a', 0);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue