Código Huffman
Olá, pessoal.
Aqui está o código da codificação Huffman que vocês fizeram em sala de aula (quer dizer, ainda falta pra chegar lá :p). A partir desse código vocês farão o compactador. Na sexta, tiro as dúvidas de vocês.
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <algorithm>
#include <vector>
using namespace std;
typedef struct no
{
int quantidade = 0;
int asc;
} nozin;
typedef struct noArvore
{
noArvore *f[2];
int quantidade;
char letra[256];
} nozinArvore;
bool compareTo(nozin a, nozin b)
{
return a.quantidade > b.quantidade;
}
bool compareArvore(noArvore *A, noArvore *B)
{
return A->quantidade < B->quantidade;
}
char *buscaElemento(char letra, noArvore *no)
{
if ((no != NULL)
return "0";
if (no->letra != letra)
{
if( (no->f[0]->letra != letra))
{
buscaElemento(letra,no->f[1]);
}
}
}
int main()
{
char palavra[256];
nozin vetorAsc[256];
int index = 0;
vector<noArvore*> vetorArvore;
printf("Informe um texto: ");
scanf("%s",palavra);
while(palavra[index] != 0)
{
vetorAsc[palavra[index]].quantidade++;
vetorAsc[palavra[index]].asc = palavra[index];
index++;
}
sort(&vetorAsc[0], &vetorAsc[256], compareTo);
index = 0;
while(index < 256)
{
if(vetorAsc[index].quantidade != 0)
{
printf("Posicao = %d | Letra: %c | Quantidade: %i\n",index, vetorAsc[index].asc, vetorAsc[index].quantidade);
noArvore *noTemp = (noArvore *)malloc(sizeof(noArvore));
noTemp->quantidade = vetorAsc[index].quantidade;
noTemp->letra = vetorAsc[index].asc;
noTemp->f[0] = noTemp->f[1] = NULL;
vetorArvore.push_back(noTemp);
}
index++;
}
sort(vetorArvore.begin(), vetorArvore.end(), compareArvore);
while(vetorArvore.size() > 1)
{
noArvore *noAux = (noArvore *)malloc(sizeof(noArvore));
noAux->f[0] = vetorArvore[0];
noAux->f[1] = vetorArvore[1];
noAux->quantidade = vetorArvore.at(0)->quantidade + vetorArvore.at(1)->quantidade;
vetorArvore.erase(vetorArvore.begin());
vetorArvore.erase(vetorArvore.begin());
vetorArvore.push_back(noAux);
sort(vetorArvore.begin(), vetorArvore.end(), compareArvore);
}
return 0;
}
Leave a Reply