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

58 lines
2.2 KiB
C
Raw Normal View History

#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.
typedef Cellule *Arbre;
2021-12-24 15:45:43 +01:00
// Définition d'une lettre/caractère pour l'entete
typedef struct entete {
2021-12-23 20:02:20 +01:00
char lettre; // la lettre / caractère
int code; // code binaire
int longueur; // longueur du code
2021-12-24 15:45:43 +01:00
} Entete;
2021-12-23 20:02:20 +01:00
2021-12-24 15:45:43 +01:00
// Convertis une liste (struct Liste) en arbre (struct Arbre) et renvoie la taille des caractères valides de la liste.
int listeVersArbre(Liste *liste);
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-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-24 15:45:43 +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'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-24 19:12:09 +01:00
void assignationCode(Arbre arbre, int codeActuel, int longueur, Entete *enteteListe, int *i, int *longueurTotale);
2021-12-24 15:45:43 +01:00
// Convertis un arbre (struct Arbre/Liste) en liste (struct Entete).
Entete *arbreVersListe(Arbre arbre, int taille, int *tailleTotale);
// Lie le fichier d'entrée pour le transformer en liste (struct Entete) de caractères.
Entete *fichierVersListe(FILE *fichier, int *nombreLettresDansFichier, int *tailleTotale);
// Écrit l'entête avec la table de Huffman dans le fichier.
2021-12-24 19:12:09 +01:00
void enteteVersFichier(Entete *enteteListe, int nombreLettresDansFichier, int longueurTotale, FILE *fichier);
2021-12-24 15:45:43 +01:00
// Écrit les données une fois traduite après l'algorithme de Huffman dans le fichier de sortie.
2021-12-24 19:12:09 +01:00
void huffmanVersFichier(FILE *entree, FILE *sortie, Entete *enteteListe, int nombreLettresDansFichier);
2021-12-24 00:15:30 +01:00
2021-12-25 11:59:03 +01:00
// Récupère les infos d'une lettre depuis l'entête
Entete recuperationLettre(char lettre, Entete *enteteListe, int nombreLettresDansFichier);
#endif