From 03168857d03d3bf45e6625f69759189e0f5eb8ed Mon Sep 17 00:00:00 2001 From: mertz Date: Thu, 4 Apr 2019 12:07:50 +0200 Subject: [PATCH] create tree op --- main.c | 21 +++++++++++++++++++++ tree.c | 56 +++++++++++++++++++++++++++++++++++++++++++------------- tree.h | 4 ++-- 3 files changed, 66 insertions(+), 15 deletions(-) create mode 100644 main.c diff --git a/main.c b/main.c new file mode 100644 index 0000000..e8b04b7 --- /dev/null +++ b/main.c @@ -0,0 +1,21 @@ +#include "tree.h" + +int main() +{ + FILE* fp = fopen("american-english","r"); + //FILE* fp = fopen("dico_test","r"); + + if(fp == NULL) return 1 ; //File is not readable + + struct node* tab[26]; + for(int i=0;i<26;i++) + { + tab[i]=NULL; + } + + load_tree(fp,tab);//supprimer la case + + printf("Loading done!\n"); + + return 0; +} diff --git a/tree.c b/tree.c index 9135def..589669c 100644 --- a/tree.c +++ b/tree.c @@ -43,20 +43,23 @@ int is_leaf(struct node *tree) return tree->fin||tree->fils[0]==NULL; } -void add(struct node ***tab_ptr_tree, char val[],int taille, int fl) +/*void add(struct node **tab_ptr_tree, char val[],int taille, int fl) { - Node** node = tab_ptr_tree[fl]; + Node* node = tab_ptr_tree[fl]; for(int i=0;ival); + cons_tree(&node,val[i]); + printf("%d",node->val); + tab_ptr_tree[fl] = node; + continue; + } int trouve = -1; - for(int j=0;j<(*node)->nbr_fils;j++) + for(int j=0;j<(node)->nbr_fils;j++) { - if((*node)->fils[j]->val==val[i]) + if((node)->fils[j]->val==val[i]) { trouve=j; break; @@ -64,19 +67,45 @@ void add(struct node ***tab_ptr_tree, char val[],int taille, int fl) } if(trouve == -1) {//ajouter fils - (*node)->nbr_fils++; - (*node)->fils = realloc((*node)->fils,((*node)->nbr_fils)*sizeof(struct node*)); - cons_tree(&((*node)->fils[((*node)->nbr_fils)-1]),val[i]); + (node)->nbr_fils++; + (node)->fils = realloc((node)->fils,((node)->nbr_fils)*sizeof(struct node*)); + cons_tree(&((node)->fils[((node)->nbr_fils)-1]),val[i]); trouve = 0; } - *node = (*node)->fils[trouve]; + node = (node)->fils[trouve]; if(i==taille-1) { - (*node)->fin=1; + (node)->fin=1; } } //mettre fin à 1 pour le bon //if(i==taille-1)(*(tab_ptr_tree[fl]))->fin=1; // + }*/ + +void add(struct node **tab_ptr_tree, char val[],int taille, int fl) +{ + if(tab_ptr_tree[fl]==NULL)cons_tree(&(tab_ptr_tree[fl]),val[0]+97); + Node* noeudtest = tab_ptr_tree[fl]; + for(int i = 1;inbr_fils;j++) + { + if(noeudtest->fils[j]->val==val[i])trouve=j; + } + if(trouve==-1) + { + //ajouter lettre + noeudtest->nbr_fils++; + noeudtest->fils = realloc(noeudtest->fils,(noeudtest->nbr_fils)*sizeof(struct node*)); + cons_tree(&(noeudtest->fils[(noeudtest->nbr_fils)-1]),val[i]); + trouve = 0; + } + + noeudtest = noeudtest->fils[trouve];//on jump au noeud suivant + } + noeudtest->fin = 1; + } int size(char val[]) @@ -90,16 +119,17 @@ int size(char val[]) } -void load_tree(FILE *fp, struct node ***tab_ptr_tree) +void load_tree(FILE *fp, struct node **tab_ptr_tree) { //fl (first letter) char val[50]; while(fscanf(fp, "%s",val)==1) { + int taille = size(val); if(val[0]<97)val[0]+=32; val[0]-=97; - add(tab_ptr_tree,val,size(val),(int)val[0]); + add(tab_ptr_tree,val,taille,(int)val[0]); } //On peut tester la bonne ou mauvaise terminaison de la lecture diff --git a/tree.h b/tree.h index be7dfcd..83cba76 100644 --- a/tree.h +++ b/tree.h @@ -14,8 +14,8 @@ void mk_empty_tree(struct node **); int is_leaf(struct node *); -void add(struct node ***, char* ,int ,int); +void add(struct node **, char* ,int ,int); -void load_tree(FILE *, struct node ***); +void load_tree(FILE *, struct node **); void free_tree(struct node **); -- libgit2 0.21.2