From d74431cd5970e3a29d2fdbf1908a9d9c9a14e3cd Mon Sep 17 00:00:00 2001 From: grouille Date: Thu, 28 Mar 2019 12:11:02 +0100 Subject: [PATCH] Ajout de tree.c --- lib.txt | 5 +++++ tree.c | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 96 insertions(+), 0 deletions(-) create mode 100644 lib.txt create mode 100644 tree.c diff --git a/lib.txt b/lib.txt new file mode 100644 index 0000000..8eebdb3 --- /dev/null +++ b/lib.txt @@ -0,0 +1,5 @@ +banane +banc +bilan +chien +chienne diff --git a/tree.c b/tree.c new file mode 100644 index 0000000..261c23c --- /dev/null +++ b/tree.c @@ -0,0 +1,91 @@ +#include +#include +#include +#define MAX 30 + +typedef struct node* Node; + +typedef struct node { + char letter; + Node next[26]; + bool endWord; +}node; + +void mk_empty_tree(Node* Tree) +{ + *Tree = NULL; +} + +bool is_empty_tree(Node* Tree) +{ + return(*Tree==NULL); +} + +void init_tree(Node* Tree) +{ + if(is_empty_tree(Tree)) + { + *Tree = malloc(sizeof(Node)); + (*Tree)->letter = '?'; + (* Tree)->endWord = false; + for(int i=0; i<26; i++) + (*Tree)->next[i] = NULL; + } +} + +void add_in_tree(Node *Tree, char word[]) +{ + char letter = word[0]; + int j=0; + while(letter != '/0') + { + char letter = word[j]; + if((*Tree)->next[letter-'a']!=NULL) + *Tree = (*Tree)->next[letter-'a']; + else + { + Node new = NULL; + new = malloc(sizeof(Node)); + new->letter = letter; + for(int i=0; i<26; i++) + { + new->next[i]=NULL; + } + (*Tree)->next[letter-'a'] = new; + } + j++; + } + (*Tree)->endWord = true; +} + +void read_lib(FILE* fp, Node* Tree) +{ + char word[MAX]; + while(1) + { + if(fscanf(fp, "%s", &word)!=1) + break; + add_in_tree(Tree, word); + } +} + +void print_tree(Node Tree, int index) +{ + Node printedTree = Tree; + if(printedTree!=NULL) + printf("%c", printedTree->letter); + if(printedTree->next[index]==NULL) + print_tree(printedTree, index+1); + else + print_tree(printedTree->next[index], 0); +} + +int main(int argc, char *argv[]) +{ + Node Tree = NULL; + FILE* fp; + fp = fopen(argv[argc-1], "r"); + read_lib(fp, &Tree); + print_tree(Tree, 0); + return 0; +} -- libgit2 0.21.2