This repository has been archived on 2022-03-31. You can view files and clone it, but cannot push or open issues or pull requests.
Huffman/arbre.h
2021-12-24 00:16:44 +01:00

45 lines
1.5 KiB
C

#ifndef _ARBRE_HUFFMAN_H_
#define _ARBRE_HUFFMAN_H_ 1
#include <stdio.h>
#include <stdlib.h>
#include "liste.h"
// Définition de l'Arbre.
typedef Cellule *Arbre;
// 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;
// Convertis une liste en Arbre.
void convertisseurListeEnArbre(Liste *liste);
// Encode un fichier.
void compression(FILE *entree, FILE *sortie);
// Décode un fichier.
void decompression(FILE *entree, FILE *sortie);
/*
Ajoute les valeurs des lettres dans l'arbre récursivement.
-> `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
J'essaie de favoriser l'utilisation de pointeur pour éviter de recopier plus fois la même chose en mémoire.
Parcours prefixé de l'arbre.
*/
void assignationCode(Arbre arbre, int codeActuel, int longueur, Lettre *lettresListe, int *i, int *longueurTotale);
// Convertis un arbre (struct Arbre) en Liste (struct Lettre).
Lettre * arbreVersListe(Arbre arbre, int taille, int *tailleTotale);
#endif