2021-12-18 13:50:56 +01:00
|
|
|
#ifndef _ARBRE_HUFFMAN_H_
|
|
|
|
#define _ARBRE_HUFFMAN_H_ 1
|
|
|
|
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
|
|
|
#include "liste.h"
|
|
|
|
|
2021-12-23 20:02:20 +01:00
|
|
|
// Définition de l'Arbre.
|
2021-12-18 13:50:56 +01:00
|
|
|
typedef Cellule *Arbre;
|
|
|
|
|
2021-12-23 20:02:20 +01:00
|
|
|
// Définition d'une lettre/caractère au sens large
|
|
|
|
typedef struct lettre {
|
|
|
|
char lettre; // la lettre / caractère
|
|
|
|
int code; // code binaire
|
|
|
|
int longueur; // longueur du code
|
|
|
|
} Lettre;
|
|
|
|
|
2021-12-24 00:20:57 +01:00
|
|
|
// Convertis une liste (struct Liste) en arbre (struct Arbre).
|
|
|
|
void listeVersArbre(Liste *liste);
|
2021-12-18 13:50:56 +01:00
|
|
|
|
2021-12-23 20:02:20 +01:00
|
|
|
// Encode un fichier.
|
|
|
|
void compression(FILE *entree, FILE *sortie);
|
|
|
|
|
|
|
|
// Décode un fichier.
|
|
|
|
void decompression(FILE *entree, FILE *sortie);
|
2021-12-18 13:50:56 +01:00
|
|
|
|
2021-12-23 20:02:20 +01:00
|
|
|
/*
|
2021-12-23 21:45:05 +01:00
|
|
|
Ajoute les valeurs des lettres dans l'arbre récursivement.
|
2021-12-23 20:02:20 +01:00
|
|
|
-> `arbre` l'arbre binaire de huffman
|
|
|
|
-> `codeActuel` monte progresssivement quand on parcours l'arbre et c'est la valeur assigné aux noeuds
|
|
|
|
-> `longueur` la profondeur du noeud dans l'arbre
|
|
|
|
-> `lettresListe` notre liste de lettre
|
|
|
|
-> `i` nous permet de se balader dans la liste `lettresListe` (c'est là où l'on se trouve)
|
|
|
|
-> `longueurTotale` est la longueur totale du code en sortie en bits
|
2021-12-23 21:45:05 +01:00
|
|
|
|
|
|
|
J'essaie de favoriser l'utilisation de pointeur pour éviter de recopier plus fois la même chose en mémoire.
|
2021-12-23 23:57:54 +01:00
|
|
|
Parcours prefixé de l'arbre.
|
2021-12-23 20:02:20 +01:00
|
|
|
*/
|
2021-12-23 23:57:54 +01:00
|
|
|
void assignationCode(Arbre arbre, int codeActuel, int longueur, Lettre *lettresListe, int *i, int *longueurTotale);
|
2021-12-18 13:50:56 +01:00
|
|
|
|
2021-12-24 00:20:57 +01:00
|
|
|
// Convertis un arbre (struct Arbre) en liste (struct Lettre).
|
2021-12-24 00:15:30 +01:00
|
|
|
Lettre * arbreVersListe(Arbre arbre, int taille, int *tailleTotale);
|
|
|
|
|
2021-12-18 13:50:56 +01:00
|
|
|
#endif
|