diff --git a/arbre_de_codage/arbre_binaire.c b/arbre_de_codage/arbre_binaire.c index bc15f5d..625bb9c 100644 --- a/arbre_de_codage/arbre_binaire.c +++ b/arbre_de_codage/arbre_binaire.c @@ -8,7 +8,7 @@ arbre creer_arbre_vide (void) return NULL ; } -arbre creer_arbre_huffman(Elt e, int p, arbre fg, arbre fd) +arbre creer_arbre_huffman(int e, int p, arbre fg, arbre fd) { noeud * tmp = malloc(sizeof(noeud)); tmp->elt=e; @@ -30,7 +30,7 @@ arbre fils_droit(arbre b) return b->fils_droit; } -Elt racine(arbre a) +int racine(arbre a) { assert(!est_arbre_vide(a)); return a->elt; @@ -41,7 +41,7 @@ bool est_arbre_vide(arbre a) return (a == NULL) ; } -arbre creer_feuille(Elt e, int p) +arbre creer_feuille(int e, int p) { return creer_arbre_huffman(e, p, creer_arbre_vide(), creer_arbre_vide()) ; } diff --git a/arbre_de_codage/arbre_binaire.h b/arbre_de_codage/arbre_binaire.h index 59fe67d..3dc1a0f 100644 --- a/arbre_de_codage/arbre_binaire.h +++ b/arbre_de_codage/arbre_binaire.h @@ -1,10 +1,9 @@ #ifndef __ARBRE_BINAIRE__ #define __ARBRE_BINAIRE__ -typedef int Elt; typedef int bool; struct znoeud { - Elt elt ; + int elt ; int poids; struct znoeud *fils_gauche; struct znoeud *fils_droit; @@ -13,13 +12,13 @@ typedef struct znoeud noeud ; typedef struct znoeud * arbre; arbre creer_arbre_vide(void); -arbre creer_arbre_huffman(Elt e, int p, arbre fg, arbre fd); +arbre creer_arbre_huffman(int e, int p, arbre fg, arbre fd); arbre fils_gauche(arbre a); arbre fils_droit(arbre a); -Elt racine(arbre a); +int racine(arbre a); bool est_arbre_vide(arbre a); -arbre creer_feuille(Elt e, int p) ; +arbre creer_feuille(int e, int p) ; bool est_feuille(arbre a) ; char *arbre_rechercher(arbre a, char c, char*s); #endif diff --git a/main_compress.c b/main_compress.c index 988cee2..cbea16c 100644 --- a/main_compress.c +++ b/main_compress.c @@ -2,11 +2,11 @@ #include "arbre_de_codage/arbre_binaire.c" #define ASCII_EXT 256 -arbre huffman(arbre H, int Tp[], int Tl[]); -void frequence(int Tp[], int Tl[], FILE *file); -void tri_tab(int T[],int T2[],int n); -void afficher_tab(int Tp[], int Tl[], int n); -void init_tab(int T[], int Elt, int n); +arbre huffman(arbre T); +void frequence(arbre T, FILE *file); +void tri_tab(arbre T,int n); +void afficher_tab(arbre T, int n); +void init_tab(arbre T, int Elt, int n); // main_compress.c [nom_du_fichier_a_compresser] int main(int argc, char **argv){ @@ -19,118 +19,110 @@ int main(int argc, char **argv){ printf("\nErreur : Veuillez mettre en argument un nom de fichier à compresser (Ex: %s text.txt)\n",argv[0]); return -1; } - // Vérification de l'ouverture du fichier en mode lecture binaire !! FONCTION A MODIFIER + // Vérification de l'o(uverture du fichier en mode lecture binaire !! FONCTION A MODIFIER else if(!(file=fopen(filename,mode))){ printf("\nErreur : Fichier %s inexistant\n",filename); return -2; } - // Récupérer fréquence - int Tp[ASCII_EXT],Tl[ASCII_EXT]; - init_tab(Tp,-1,ASCII_EXT); - init_tab(Tl,-1,ASCII_EXT); - int compteur; - compteur=0; - frequence(Tp,Tl,file); - // Tri - tri_tab(Tp,Tl,ASCII_EXT); - afficher_tab(Tp,Tl,ASCII_EXT); + printf("Tableau : \n"); + arbre N = malloc(ASCII_EXT*sizeof(noeud)); // Initialisation de l'arbre + printf("Tableau initialisé -1: \n"); + init_tab(N,-1,ASCII_EXT); // On initialise l'arbre avec des poids de -1 + printf("Tableau get freq : \n"); + frequence(N,file); // On récupère la fréquence d'apparition des lettres du fichiers + printf("Tableau tri : \n"); + tri_tab(N,ASCII_EXT); // On fait un tri à bulle sur ce tableau + printf("Tableau affichage : \n"); + afficher_tab(N,ASCII_EXT); + arbre huff; - huff = huffman(creer_arbre_vide(),Tp,Tl); + printf("Huffman : \n"); + //huff = huffman(T); + printf("Arbre :\n"); return 0; } -void init_tab(int T[], int Elt, int n){ +void init_tab(arbre T[], int Elt, int n){ int i; for(i=0;iT[j]){ - tmp=T[i]; - tmp2=T2[i]; - T[i]=T[j]; - T2[i]=T2[j]; - T[j]=tmp; - T2[j]=tmp2; - } - } +void tri_tab(arbre T,int n){ + int i,j; + noeud tmp; + for(i=0;iT[j].poids){ + tmp=T[i]; + T[i]=T[j]; + T[j]=tmp; + } } -} - -void afficher_tab(int Tp[], int Tl[], int n){ - printf("\n"); - int i; - for (i=0;i1){ + // Récupération des plus faibles poids + int i; + i=0; + while(T[i].poids!=-1){ + i++; + } + arbre tmp;k + tmp1=creer_arbre_vide(); + tmp2=creer_arbre_vide(); + tmp3=creer_arbre_vide(); + int newpoids; + newpoids=T[i].poids+T[i+1].poids; + tmp->fils_gauche=creer_feuille(T[i].elt,T[i].poids); + tmp->fils_droit=creer_feuille(T[i+1].elt,T[i+1].poids); + tmp->poids=newpoids; + + T[i].poids=-1; + T[i].elt=-1; + T[i+1].poids=newpoids; + T[i+1].elt=-1; + tri_tab(T,ASCII_EXT); + H= } - return H; }