c10c6bfc6bbcaa06bfdfd3827385c180b87fab8d
1 /*****************************************************************************/
4 /* Representation d'un ensemble de mots sous forme d'arbre n-aire */
5 /*****************************************************************************/
12 /* nombre de caracteres max dans un mot */
22 /* Recherche d'un mot dans l'arbre *****************************************/
24 recherche (NOEUD
* p
, char *mot
, int i
)
28 if (mot
[i
] == p
->lettre
)
36 return recherche (p
->fils
, mot
, i
+ 1);
41 if (p
->lettre
> mot
[i
])
47 return recherche (p
->frere
, mot
, i
);
52 /* Creation d'une fin de mot (liste chainee suivant le lien fils) **********/
54 insere_fin (char *mot
, int i
)
56 /* i est l'indice de la lettre courante dans le mot */
57 printf ("insere_fin %c, %i\n", mot
[i
], i
);
58 NOEUD
*p
= (NOEUD
*) malloc (sizeof (NOEUD
));
65 p
->fils
= insere_fin (mot
, i
+ 1);
69 /* Insertion d'un mot dans l'arbre ******************************************/
70 /* (on respecte l'ordre lexicographique des freres)**************************/
72 insere (NOEUD
* p
, char *mot
, int i
)
74 /* i est l'indice de la lettre courante dans le mot */
77 p
= insere_fin (mot
, i
);
81 /*****************************************************************************/
82 /* Affichage par ordre alphabetique de tous les mots stockes dans l'arbre */
84 affiche (NOEUD
* p
, char *mot
, int i
)
86 /* i est l'indice de la lettre courante dans le mot */
90 /* Visualisation de l'arbre n-aire *******************************************/
92 affiche_arbre (NOEUD
* p
, int prof
)
93 /* prof est utilise pour decaller l'affichage avec des espaces (selon le niveau dans l'arbre) */
98 affiche_arbre (p
->frere
, prof
);
99 for (i
= 0; i
< prof
; i
++)
101 printf ("%c\n", p
->lettre
);
102 affiche_arbre (p
->fils
, prof
+ 1);
106 /* Suppression d'un mot de l'arbre ********************************************/
107 /* Attention a ne supprimer que la fin du mot qui n'est partagee par aucun autre mot de l'arbre */
109 supprime (NOEUD
* p
, char *mot
, int i
)
110 /* i est l'indice de la lettre courante dans le mot */
116 /* Chargement des mots d'un fichier (vu comme un dictionnaire) dans l'arbre **/
118 charge_dico (char *nom_fichier
, int *nb_mots
)
125 fp
= fopen (nom_fichier
, "rt");
128 fscanf (fp
, "%d", nb_mots
); /* sur la 1ere ligne du fichier, le nombre de mots */
129 for (i
= 0; i
< *nb_mots
; i
++)
131 fscanf (fp
, "%s", mot
);
132 p
= insere (p
, mot
, 0); /* TODO il faut finir "insere" pour que "charge_dico" fonctionne */
138 /* Ecriture dans fp de tous les mots stockes dans l'arbre ********************/
140 affiche_fich (FILE * fp
, NOEUD
* p
, char *mot
, int i
)
143 /* ressemble beaucoup a "affiche", avec le parametre en plus "fp" qui est un FILE* */
146 /* Sauvegarde des mots de l'arbre dans un fichier ****************************/
148 sauve_dico (NOEUD
* p
, char *nom_fichier
, int nb_mots
)
152 fp
= fopen (nom_fichier
, "wt");
155 fprintf (fp
, "%d\n", nb_mots
);
156 affiche_fich (fp
, p
, mot
, 0); /* TODO il faut finir la fonction "affiche_fich" pour que "sauve_dico" fonctionne */
160 /*****************************************************************************/
162 main (int argc
, char *argv
[])
166 printf ("saisir un mot : ");
168 printf ("\ninsertion de %s\n", mot
);
169 arbre
= insere (arbre
, mot
, 0);
170 printf ("\naffichage arbre :\n");
171 affiche_arbre (arbre
, 0);
175 /* Exemple de trace d'execution *************************
177 saisir un mot : salut
196 **********************************************************/