diff --git a/arbre_de_codage/arbre_binaire.c b/arbre_de_codage/arbre_binaire.c index 625bb9c..910168e 100644 --- a/arbre_de_codage/arbre_binaire.c +++ b/arbre_de_codage/arbre_binaire.c @@ -1,6 +1,7 @@ #include #include #include +#include #include "arbre_binaire.h" arbre creer_arbre_vide (void) @@ -8,7 +9,7 @@ arbre creer_arbre_vide (void) return NULL ; } -arbre creer_arbre_huffman(int e, int p, arbre fg, arbre fd) +arbre creer_arbre_huffman(Elt e, int p, arbre fg, arbre fd) { noeud * tmp = malloc(sizeof(noeud)); tmp->elt=e; @@ -41,7 +42,7 @@ bool est_arbre_vide(arbre a) return (a == NULL) ; } -arbre creer_feuille(int e, int p) +arbre creer_feuille(Elt e, int p) { return creer_arbre_huffman(e, p, creer_arbre_vide(), creer_arbre_vide()) ; } @@ -68,18 +69,23 @@ void free_arbre(arbre a) } } -char *arbre_rechercher(arbre a, char c, char*s) +char *arbre_rechercher(arbre a, Elt c, char s[]) { - if (racine(a)==c) - { - return s ; + if(a->elt == c){ + return s; } if (!est_arbre_vide(fils_gauche(a))) { - arbre_rechercher(fils_gauche(a),c,s+'0') ; + char c1[]="0"; + strcat(s,c1); + printf("0"); + arbre_rechercher(fils_gauche(a),c,s); } if (!est_arbre_vide(fils_droit(a))) { - arbre_rechercher(fils_droit(a),c,s+'1') ; + char c2[]="1"; + strcat(s,c2); + printf("1"); + arbre_rechercher(fils_droit(a),c,s); } } \ No newline at end of file diff --git a/arbre_de_codage/arbre_binaire.h b/arbre_de_codage/arbre_binaire.h index 3dc1a0f..83410c4 100644 --- a/arbre_de_codage/arbre_binaire.h +++ b/arbre_de_codage/arbre_binaire.h @@ -1,9 +1,10 @@ #ifndef __ARBRE_BINAIRE__ #define __ARBRE_BINAIRE__ +typedef char Elt; typedef int bool; struct znoeud { - int elt ; + char elt ; int poids; struct znoeud *fils_gauche; struct znoeud *fils_droit; @@ -11,14 +12,19 @@ struct znoeud { typedef struct znoeud noeud ; typedef struct znoeud * arbre; +typedef struct zcode{ + int lettre; + char *s; +} codage; +typedef struct zcode * code; + arbre creer_arbre_vide(void); -arbre creer_arbre_huffman(int e, int p, arbre fg, arbre fd); +arbre creer_arbre_huffman(Elt e, int p, arbre fg, arbre fd); arbre fils_gauche(arbre a); arbre fils_droit(arbre a); int racine(arbre a); bool est_arbre_vide(arbre a); - -arbre creer_feuille(int e, int p) ; +arbre creer_feuille(Elt e, int p) ; bool est_feuille(arbre a) ; -char *arbre_rechercher(arbre a, char c, char*s); +char *arbre_rechercher(arbre a, Elt c, char s[]); #endif diff --git a/gestion_des_fichiers/test.txt b/gestion_des_fichiers/test.txt index ac0307c..a3b5af6 100644 --- a/gestion_des_fichiers/test.txt +++ b/gestion_des_fichiers/test.txt @@ -1 +1 @@ -DDDCCCBBBBBAAAAAA \ No newline at end of file +Ceci est un test. \ No newline at end of file diff --git a/main_compress.c b/main_compress.c index ed43027..0e0617e 100644 --- a/main_compress.c +++ b/main_compress.c @@ -38,7 +38,16 @@ int main(int argc, char **argv){ arbre huff; printf("Huffman : \n"); huff = huffman(N); - printf("Arbre :\n"); + + // Récupération du code de chaque charactere + printf("Code : \n"); + code C[ASCII_EXT]; + + char s[]=""; + arbre_rechercher(huff,'C',s); + printf("\nfin test\n"); + printf("%s \n",s); + printf("FIN\n"); return 0; } @@ -108,13 +117,13 @@ arbre huffman(arbre T[]){ } int Index; Index=i; - while(Index<(ASCII_EXT-1)){ + while(Indexfils_gauche=T[Index]; tmp->fils_droit=T[Index+1]; tmp->poids=T[Index]->poids +T[Index+1]->poids; T[Index+1]=tmp; - printf("%d\n",tmp->poids); + printf("%d %c %c\n",tmp->poids,tmp->fils_gauche->elt,tmp->fils_droit->elt); Index++; tri_tab(T,ASCII_EXT); }