Ejemplo n.º 1
0
Archivo: ed1.c Proyecto: pl225/AA-ED1
/**
* Funcao Criar Nos Folhas
* @brief Funcao que gera os nos iniciais para a montagem da arvore de huffman
* Funcao que avalia se a frequencia das letras que estao na arvore for maior que zero, se isso ocorre nos sao criados para cada
* letra e sao inseridos utilizando a funcao de inserir os nos de maneira ordenada pela frequencia (@see inserir_no)
*/
void criar_nos_folhas (Huffman* h)
{
    int i; /**< indice do for*/
    No* novo;
    for (i=0; i<TOTSIM; i++)
    {
        if (h->frequencia_letras[i]>0)
        {
            novo = criar_no();
            novo->letra = i;
            novo->frequencia = h->frequencia_letras[i];
            inserir_no(h, novo);
        }
    }
}
Ejemplo n.º 2
0
Archivo: ed1.c Proyecto: pl225/AA-ED1
/**
* Funcao Montar Arvore de Huffman
* @brief Funcao gera uma arvore de huffman produzindo todos os nos da mesma
* Funcao que possui como entrada uma arvore @param h que atraves da lista encadeada que a variavel h possui monta uma arvore,
* removendo os elementos de menor frequencia no processo e unindo-os em um novo no x que representa a soma das frequencias dos nos
* de menor frequencia, informando tambem os lados que os nos removidos e retornados ao programa irao se encaixar na arvore. Portanto,
* percebe-se que essa funcao destroi a antiga lista encadeada e a remonta como a verdadeira arvore de huffman
*/
void montar_arvore_huffman (Huffman* h)
{
    while (h->tamanho>1)
    {
        No* s0 = remover_item_menor_frequencia(h);
        No* s1 = remover_item_menor_frequencia(h);
        No* x = criar_no();
        s0->lado = '0';
        s1->lado = '1';
        x->filhoesq = s0;
        x->filhodir = s1;
        x->frequencia = s0->frequencia + s1->frequencia;
        inserir_no(h, x);
    }
}
Ejemplo n.º 3
0
void inserir_linha()  /*Inserir linha vazia no topo */
{
	top = inserir_no(top); /*Insere um no vazio */
}