From 4043090fa8792612792fc3366326c47fc98c6fee Mon Sep 17 00:00:00 2001 From: bjeanlou Date: Tue, 2 Apr 2019 15:36:03 +0200 Subject: [PATCH] update2 withHash --- treeh.c | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------- treeh.h | 20 +++++++++++++------- 2 files changed, 71 insertions(+), 20 deletions(-) diff --git a/treeh.c b/treeh.c index c85b22c..c32fdd7 100644 --- a/treeh.c +++ b/treeh.c @@ -1,31 +1,76 @@ #include "treeh.h" +//initializers & destroyer tree make_empty_tree(){ return NULL; } - -void addto_tree(tree,char*,int){ - if - +node* make_empty_node(){ + node*n=malloc(sizeof(node)); + n->letter='\0'; + n->isEnd=false; + for(int i=0;inext[i]=make_empty_tree(); +} +node* make_node(char l,bool end){ + node*n=malloc(sizeof(node)); + n->letter=l; + n->isEnd=end; + for(int i=0;inext[i]=make_empty_tree(); +} +void delete_tree(tree t){ + if(is_empty(t))return; + for(int i=0;inext[i]); + free(t); } -void loadfrom_file(tree,FILE*){} -void loadfrom_keyboard(tree){} -char is_empty(tree){ + + +//Casual functions +bool is_empty(tree t){ + return t==NULL; +} +bool is_followed(tree t){ int i; for(i=0;inext[i]!=NULL) - return 0; + return true; } - return 1; + return false; } -char is_end(tree t){ - return t->isEnd!=0; +bool is_end(tree t){ + return t->isEnd; } - int hash(char c){ - //needs to check c isalpha or '; + //needs to check c wether isalpha or '\'' if(c='\'') return 0; return c%64; } + + + +// +bool addto_tree(tree t,string s,bool isIn){ + //recursive, when called : set isIn to true + //return wether s is already in t or not + if(s[0]=='\0'){ + t->isEnd=true; + return isIn; + } + if(t->next[hash(s[0])]==NULL) + t->next[hash(s[0])]=make_node(s[0],false); +} +void addto_tree2(tree t,string s){ + //faster than addto_tree, used when it is knowned the word is not yet in dictionnary + if(s[0]=='\0'){ + t->isEnd=true; + return; + } + t->next[hash(s[0])]=make_node(s[0],false); + addto_tree2(t->next[hash(s[0])], +} +void loadfrom_file(tree,FILE*){} +void loadfrom_keyboard(tree){} + diff --git a/treeh.h b/treeh.h index 45d34ba..48ad5eb 100644 --- a/treeh.h +++ b/treeh.h @@ -4,25 +4,31 @@ #include #include #include +#include -#define NBCHAR 27 //a-z + ' +#define NBCHAR 27 //A-Z + ' -typedef +typedef struct _node node, *tree; struct node{ char letter; - char isEnd; - node* next[NBCHAR] -} *ptNode,*tree; + bool isEnd; + node* next[NBCHAR]; +}; tree make_empty_tree(); +node* make_empty_node(); +node* make_node(char,bool); +void delete_tree(tree); + +bool is_empty(tree); +bool is_end(tree); +bool is_followed(tree);//tells if tree has following letters void addto_tree(tree,char*,int); void loadfrom_file(tree,FILE*); void loadfrom_keyboard(tree); -char is_empty(tree); -char is_end(tree); int hash(char); -- libgit2 0.21.2