Commit d74431cd5970e3a29d2fdbf1908a9d9c9a14e3cd

Authored by grouille
1 parent d4da0378

Ajout de tree.c

Showing 2 changed files with 96 additions and 0 deletions   Show diff stats
lib.txt 0 → 100644
... ... @@ -0,0 +1,5 @@
  1 +banane
  2 +banc
  3 +bilan
  4 +chien
  5 +chienne
... ...
tree.c 0 → 100644
... ... @@ -0,0 +1,91 @@
  1 +#include <stdio.h>
  2 +#include <stdlib.h>
  3 +#include <stdbool.h>
  4 +#define MAX 30
  5 +
  6 +typedef struct node* Node;
  7 +
  8 +typedef struct node {
  9 + char letter;
  10 + Node next[26];
  11 + bool endWord;
  12 +}node;
  13 +
  14 +void mk_empty_tree(Node* Tree)
  15 +{
  16 + *Tree = NULL;
  17 +}
  18 +
  19 +bool is_empty_tree(Node* Tree)
  20 +{
  21 + return(*Tree==NULL);
  22 +}
  23 +
  24 +void init_tree(Node* Tree)
  25 +{
  26 + if(is_empty_tree(Tree))
  27 + {
  28 + *Tree = malloc(sizeof(Node));
  29 + (*Tree)->letter = '?';
  30 + (* Tree)->endWord = false;
  31 + for(int i=0; i<26; i++)
  32 + (*Tree)->next[i] = NULL;
  33 + }
  34 +}
  35 +
  36 +void add_in_tree(Node *Tree, char word[])
  37 +{
  38 + char letter = word[0];
  39 + int j=0;
  40 + while(letter != '/0')
  41 + {
  42 + char letter = word[j];
  43 + if((*Tree)->next[letter-'a']!=NULL)
  44 + *Tree = (*Tree)->next[letter-'a'];
  45 + else
  46 + {
  47 + Node new = NULL;
  48 + new = malloc(sizeof(Node));
  49 + new->letter = letter;
  50 + for(int i=0; i<26; i++)
  51 + {
  52 + new->next[i]=NULL;
  53 + }
  54 + (*Tree)->next[letter-'a'] = new;
  55 + }
  56 + j++;
  57 + }
  58 + (*Tree)->endWord = true;
  59 +}
  60 +
  61 +void read_lib(FILE* fp, Node* Tree)
  62 +{
  63 + char word[MAX];
  64 + while(1)
  65 + {
  66 + if(fscanf(fp, "%s", &word)!=1)
  67 + break;
  68 + add_in_tree(Tree, word);
  69 + }
  70 +}
  71 +
  72 +void print_tree(Node Tree, int index)
  73 +{
  74 + Node printedTree = Tree;
  75 + if(printedTree!=NULL)
  76 + printf("%c", printedTree->letter);
  77 + if(printedTree->next[index]==NULL)
  78 + print_tree(printedTree, index+1);
  79 + else
  80 + print_tree(printedTree->next[index], 0);
  81 +}
  82 +
  83 +int main(int argc, char *argv[])
  84 +{
  85 + Node Tree = NULL;
  86 + FILE* fp;
  87 + fp = fopen(argv[argc-1], "r");
  88 + read_lib(fp, &Tree);
  89 + print_tree(Tree, 0);
  90 + return 0;
  91 +}
... ...