add conversion tree to list
This commit is contained in:
parent
0d909dce64
commit
24ed3c5aea
2 changed files with 26 additions and 5 deletions
28
arbre.c
28
arbre.c
|
@ -29,14 +29,32 @@ void convertisseurListeEnArbre(Liste *liste) {
|
|||
}
|
||||
}
|
||||
|
||||
void prefix(Arbre arbre, int codeActuel, int longueur, Lettre *lettresListe, int *i, int longueurTotale) {
|
||||
if (arbre->lettre != '\0') {
|
||||
lettresListe[*i].lettre = arbre->lettre;
|
||||
lettresListe[*i].code = codeActuel;
|
||||
lettresListe[*i].longueur = longueur;
|
||||
void assignationCode(Arbre arbre, int codeActuel, int longueur, Lettre *lettresListe, int *i, int *longueurTotale) {
|
||||
if (arbre->lettre != '\0') { // si c'est une lettre qu'on regarde
|
||||
lettresListe[*i].lettre = arbre->lettre; // ajout de la lettre
|
||||
lettresListe[*i].code = codeActuel; // assignation de son code
|
||||
lettresListe[*i].longueur = longueur; // longueur du code (ex: 1001 est de taille 4)
|
||||
|
||||
*i += 1; // on incrémente de 1
|
||||
*longueurTotale += longueur * arbre->frequence; // incrémente la taille du code à la taille totale finale
|
||||
} else { // si c'est une "mini-racine"
|
||||
longueur++;
|
||||
codeActuel <<= 1; // décalage de bit vers la gauche
|
||||
assignationCode(arbre->gauche, codeActuel, longueur, lettresListe, i, longueurTotale); // appel récursif arbre de gauche
|
||||
codeActuel |= 1; // copie de bit si nécessaire (porte ou)
|
||||
assignationCode(arbre->droite, codeActuel, longueur, lettresListe, i, longueurTotale); // appel récursif arbre de droite
|
||||
}
|
||||
}
|
||||
|
||||
Lettre * arbreVersListe(Arbre arbre, int taille, int *tailleTotale) {
|
||||
Lettre *lettres = (Lettre*)malloc(taille * sizeof(Lettre)); // on alloue la la liste qui va contenir nos caractères
|
||||
int i = 0; // initialisation de `i` au début car `assignationCode` est récursif
|
||||
assignationCode(arbre, '\0', 0, lettres, &i, tailleTotale); // on commence avec une racine nulle et une taille de 0
|
||||
free(arbre);
|
||||
|
||||
return lettres;
|
||||
}
|
||||
|
||||
void compression(FILE *entree, FILE *sortie) {
|
||||
|
||||
}
|
||||
|
|
3
arbre.h
3
arbre.h
|
@ -39,4 +39,7 @@ void decompression(FILE *entree, FILE *sortie);
|
|||
*/
|
||||
void assignationCode(Arbre arbre, int codeActuel, int longueur, Lettre *lettresListe, int *i, int *longueurTotale);
|
||||
|
||||
// Convertis un arbre (struct Arbre) en Liste (struct Letre)
|
||||
Lettre * arbreVersListe(Arbre arbre, int taille, int *tailleTotale);
|
||||
|
||||
#endif
|
||||
|
|
Reference in a new issue