/** * 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); } } }
/** * 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); } }
void inserir_linha() /*Inserir linha vazia no topo */ { top = inserir_no(top); /*Insere um no vazio */ }