哈夫曼编码算法

这段代码展示了如何实现哈夫曼编码,包括哈夫曼树的构建、叶节点编码和销毁过程。通过示例展示了从权重数组初始化、创建、打印编码到销毁哈夫曼树的完整流程。
摘要由CSDN通过智能技术生成
huffman.h
#ifndef __HUFFMAN_H_FE
#define  __HUFFMAN_H_FE

//  哈夫曼树的节点结构
typedef  struct  _huff_node  {
    
float    weight;            // 节点权重
    int        lchild;            // 节点的左孩子
    int        rchild;            // 节点的右孩子
    int        parent;            // 节点的父节点
}
 HUFF_NODE,  * PHUFF_NODE;

//  哈夫曼树
typedef  struct  _huff_tree  {
    
int            leaf_num;        // 树中叶节点也就是需要编码的节点的数目
    int            node_num;        // 对应于叶节点的数目,哈夫曼树中一共需要 2*leaf_num - 1 个节点
    PHUFF_NODE    nodes;            // 树中所有的节点,用一个数组存放这些节点
    char**        huff_code;        // 叶节点对应的哈夫曼编码
}
 HUFF_TREE;

//  初始化一棵哈夫曼树,包括为这棵树分配空间以及权重等的初始化
void  init_huff_tree( float   * weights,  int  leaf_num, HUFF_TREE  & tree);

//  创建一棵哈夫曼树,前提是必须已经初始化了
void  create_huff_tree(HUFF_TREE  & tree);

//  打印一棵已经创建好的哈夫曼树的叶节点对应的哈夫曼编码
void  print_huff_code(HUFF_TREE  & tree);

//  销毁一棵哈夫曼树,释放初始化时申请的节点以及编码空间
void  destroy_huff_tree(HUFF_TREE  & tree);

#endif


huffman.cpp
#include  < stdio.h >
#include 
< stdlib.h >
#include 
< float .h >
#include 
< memory.h >
#include 
" huffman.h "

void  huff_encode(HUFF_TREE  & tree);

//  初始化一棵哈夫曼树
void  init_huff_tree( float   * weights,  int  leaf_num, HUFF_TREE  & tree)
{
    
// 保存叶节点数
    tree.leaf_num = leaf_num;

    
// 根据叶节点数计算整棵哈夫曼树需要的节点数
    
// 一棵二叉树中,出度为0、1、2的节点之间有如下关系:
    
// n = n0 + n1 + n2 且 n = n1 + 2*n2 + 1
    
//
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值