repositories
/
Algorithmic_C.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
TP6: n-ary tree: add insert and destroy functions
[Algorithmic_C.git]
/
TP6
/
arbres
/
arbre_n_aire
/
arbre_n_aire.c
diff --git
a/TP6/arbres/arbre-n-aire/arbre_n_aire.c
b/TP6/arbres/arbre_n_aire/arbre_n_aire.c
similarity index 89%
rename from
TP6/arbres/arbre-n-aire/arbre_n_aire.c
rename to
TP6/arbres/arbre_n_aire/arbre_n_aire.c
index e8b32016e734782c2f7bddf889c4275cc3a203f8..bfed52c9dc89f0c26bb2cca9a57cbf4b04388f32 100644
(file)
--- a/
TP6/arbres/arbre-n-aire/arbre_n_aire.c
+++ b/
TP6/arbres/arbre_n_aire/arbre_n_aire.c
@@
-1,5
+1,4
@@
/*****************************************************************************/
/*****************************************************************************/
-
/* arbre_n_aire.c */
/* Representation d'un ensemble de mots sous forme d'arbre n-aire */
/*****************************************************************************/
/* arbre_n_aire.c */
/* Representation d'un ensemble de mots sous forme d'arbre n-aire */
/*****************************************************************************/
@@
-56,21
+55,27
@@
NOEUD *insere_fin(char *mot, int i)
/* Insertion d'un mot dans l'arbre ******************************************/
/* (on respecte l'ordre lexicographique des freres)**************************/
/* Insertion d'un mot dans l'arbre ******************************************/
/* (on respecte l'ordre lexicographique des freres)**************************/
-NOEUD *insere(NOEUD * p, char *mot, int i)
+NOEUD *
_
insere(NOEUD * p, char *mot, int i)
{
/* i est l'indice de la lettre courante dans le mot */
if (p == NULL) {
return insere_fin(mot, i);
}
if (mot[i] > p->lettre) {
{
/* i est l'indice de la lettre courante dans le mot */
if (p == NULL) {
return insere_fin(mot, i);
}
if (mot[i] > p->lettre) {
- return insere(p->frere, mot, i);
+ return
_
insere(p->frere, mot, i);
} else if (mot[i] == p->lettre) {
} else if (mot[i] == p->lettre) {
- return insere(p->fils, mot, i + 1);
- } else {
- return
insere_fin(
mot, i);
+ return
_
insere(p->fils, mot, i + 1);
+ } else
if (mot[i] < p->lettre)
{
+ return
_insere(p->fils,
mot, i);
}
}
}
}
+NOEUD *insere(NOEUD * p, char *mot, int i)
+{
+ p = _insere(p, mot, i);
+ return p;
+}
+
/*****************************************************************************/
/* Affichage par ordre alphabetique de tous les mots stockes dans l'arbre */
void affiche(NOEUD * p, char *mot, int i)
/*****************************************************************************/
/* Affichage par ordre alphabetique de tous les mots stockes dans l'arbre */
void affiche(NOEUD * p, char *mot, int i)
@@
-148,8
+153,15
@@
NOEUD *charge_dico(char *nom_fichier, int *nb_mots)
/* Ecriture dans fp de tous les mots stockes dans l'arbre ********************/
void affiche_fich(FILE * fp, NOEUD * p, char *mot, int i)
{
/* Ecriture dans fp de tous les mots stockes dans l'arbre ********************/
void affiche_fich(FILE * fp, NOEUD * p, char *mot, int i)
{
- /* TODO */
- /* ressemble beaucoup a "affiche", avec le parametre en plus "fp" qui est un FILE* */
+ /* i est l'indice de la lettre courante dans le mot */
+ if (p != NULL) {
+ mot[i] = p->lettre;
+ affiche_fich(fp, p->fils, mot, i + 1);
+ if (mot[i] == '\0') {
+ fprintf(fp, "%s\n", mot);
+ }
+ affiche_fich(fp, p->frere, mot, i);
+ }
}
/* Sauvegarde des mots de l'arbre dans un fichier ****************************/
}
/* Sauvegarde des mots de l'arbre dans un fichier ****************************/
@@
-162,7
+174,7
@@
void sauve_dico(NOEUD * p, char *nom_fichier, int nb_mots)
if (fp == NULL)
exit(-1);
fprintf(fp, "%d\n", nb_mots);
if (fp == NULL)
exit(-1);
fprintf(fp, "%d\n", nb_mots);
- affiche_fich(fp, p, mot, 0);
/* TODO il faut finir la fonction "affiche_fich" pour que "sauve_dico" fonctionne */
+ affiche_fich(fp, p, mot, 0);
fclose(fp);
}
fclose(fp);
}
@@
-184,7
+196,10
@@
int main(int argc, char *argv[])
affiche_arbre(arbre, 0);
if (recherche(arbre, "salut", 0))
printf("mot \"salut\" present\n");
affiche_arbre(arbre, 0);
if (recherche(arbre, "salut", 0))
printf("mot \"salut\" present\n");
+ sauve_dico(arbre, "dictionnaire_debug", nb_mots);
detruis_arbre(arbre);
detruis_arbre(arbre);
+ if (!arbre)
+ affiche_arbre(arbre, 0);
/* TODO */
}
/* TODO */
}