7197538b
mclaudel
Projet modifié
|
1
2
3
|
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
|
5a0b8312
mclaudel
Algorithme amélio...
|
4
|
#include <string.h>
|
7197538b
mclaudel
Projet modifié
|
5
|
|
5a0b8312
mclaudel
Algorithme amélio...
|
6
|
#define MAX_LETTRES 30
|
7197538b
mclaudel
Projet modifié
|
7
8
9
|
typedef struct node {
|
5a0b8312
mclaudel
Algorithme amélio...
|
10
|
char l;
|
7197538b
mclaudel
Projet modifié
|
11
12
13
14
15
|
struct node * lettres[27];
bool fin_de_mot;
int dernier;
} Node;
|
3b142eb1
mclaudel
Projet modifié
|
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
bool is_empty(struct node *tree)
{
return tree==NULL;
}
bool is_leaf(struct node *tree)
{
int cpt;
int i=0;
if (is_empty(tree)) return 1;
while (tree->lettres[i] != NULL){
cpt++;
i++;
}
if (cpt !=0) cpt=1;
return(!is_empty(tree) && !cpt);
}
|
7197538b
mclaudel
Projet modifié
|
34
|
|
5a0b8312
mclaudel
Algorithme amélio...
|
35
|
void ajout(Node **N, char mot)
|
7197538b
mclaudel
Projet modifié
|
36
|
{
|
5a0b8312
mclaudel
Algorithme amélio...
|
37
38
39
|
Node *nouveau = malloc(sizeof(struct node));
(*nouveau).l=mot;
for (int i=0; i<27; i++) nouveau->lettres[i]=NULL;
|
7197538b
mclaudel
Projet modifié
|
40
41
42
43
|
*N = nouveau;
}
|
5a0b8312
mclaudel
Algorithme amélio...
|
44
|
void ajout_alphab(Node ** pn, char * mot,int cpt)
|
7197538b
mclaudel
Projet modifié
|
45
|
{
|
5a0b8312
mclaudel
Algorithme amélio...
|
46
47
|
int i = 0;
while (mot[cpt] != '\0'){
|
3b142eb1
mclaudel
Projet modifié
|
48
49
50
51
|
if ((*pn)==NULL){
ajout(pn,mot[cpt]);
return;
}
|
5a0b8312
mclaudel
Algorithme amélio...
|
52
53
54
55
56
57
|
while ((*pn)->lettres[i] != NULL){
if (strcmp(&(*pn)->l,mot) != 0){
i++;
}
*pn=(*pn)->lettres[i];
return ajout_alphab(pn,mot,cpt++);
|
7197538b
mclaudel
Projet modifié
|
58
|
}
|
3b142eb1
mclaudel
Projet modifié
|
59
|
(*pn)->dernier++;
|
5a0b8312
mclaudel
Algorithme amélio...
|
60
61
62
63
|
ajout(&(*pn)->lettres[i],mot[cpt]);
*pn=(*pn)->lettres[i];
cpt++;
}
|
3b142eb1
mclaudel
Projet modifié
|
64
|
(*pn)->fin_de_mot=1;
|
7197538b
mclaudel
Projet modifié
|
65
66
67
|
}
|
5a0b8312
mclaudel
Algorithme amélio...
|
68
69
|
Node * charger_arbre(Node ** Arbre){
FILE * dico;
|
7197538b
mclaudel
Projet modifié
|
70
|
char mot[MAX_LETTRES];
|
3b142eb1
mclaudel
Projet modifié
|
71
|
dico = fopen("test.txt","r");
|
7197538b
mclaudel
Projet modifié
|
72
|
while (fscanf(dico,"%s",mot) == 1){
|
5a0b8312
mclaudel
Algorithme amélio...
|
73
|
ajout_alphab(Arbre,mot,0);
|
7197538b
mclaudel
Projet modifié
|
74
|
}
|
5a0b8312
mclaudel
Algorithme amélio...
|
75
76
|
fclose(dico);
return *Arbre;
|
7197538b
mclaudel
Projet modifié
|
77
78
|
}
|
3b142eb1
mclaudel
Projet modifié
|
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
void affichage_arbre(Node * Arbre)
{
if (is_empty(Arbre)) return;
if (Arbre->lettres[0]== NULL) return;
for (int i=0; i<Arbre->dernier; i++){
printf("%c -> %c",Arbre->l,Arbre->lettres[i]->l);
affichage_arbre(Arbre->lettres[i]);
if (Arbre->fin_de_mot) printf("fin de mot");
}
}
void detruire_arbre(Node ** Arbre)
{
for (int i=0; i<(*Arbre)->dernier ; i++){
if (*Arbre!=NULL) detruire_arbre(&(*Arbre)->lettres[i]);
}
free(*Arbre);
}
void initialisation(Node ** Arbre){
Node *nouveau = malloc(sizeof(struct node));
(*nouveau).l='?';
for (int i=0; i<27; i++) nouveau->lettres[i]=NULL;
nouveau->dernier=0;
*Arbre = nouveau;
}
|
5a0b8312
mclaudel
Algorithme amélio...
|
107
108
|
int main(){
|
3b142eb1
mclaudel
Projet modifié
|
109
110
111
112
113
|
Node * Arbre;
initialisation(&Arbre);
charger_arbre(&Arbre);
affichage_arbre(Arbre);
detruire_arbre(&Arbre);
|
5a0b8312
mclaudel
Algorithme amélio...
|
114
115
|
return 0;
}
|