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

Your email address will not be published. Required fields are marked *

*