- 50
- 0
- 约1.21万字
- 约 10页
- 2020-08-15 发布于广东
- 举报
哈夫曼编码步骤:
一、对给定的n 个权值{W1,W2,W3,...,Wi,...,Wn}构成n 棵二叉树的初始集合F=
{T1,T2,T3,...,Ti,...,Tn},其中每棵二叉树Ti 中只有一个权值为Wi 的根结点,它的左右子树均为空。(为
方便在计算机上实现算 法,一般还要求以Ti 的权值Wi 的升序排列。)
二、在F 中选取两棵根结点权值最小的树作为新构造的二叉树的左右子树,新二叉树的根结点的权值为其
左右子树的根结点的权值之和。
三、从F 中删除这两棵树,并把这棵新的二叉树同样以升序排列加入到集合F 中。
四、重复二和三两步,直到集合F 中只有一棵二叉树为止。
/*
* Name: 哈夫曼编码源代码。
* Date: 2011.04.16 * Author: Jeffrey Hill+Jezze(解码部分)
* 在 Win-TC 下测试通过
* 实现过程:着先通过 HuffmanTree() 函数构造哈夫曼树,然后在主函数 main() 中
* 自底向上开始(也就是从数组序号为零的结点开始) 向上层层判断,若在
* 父结点左侧,则置码为 0,若在右侧,则置码为 1。最后输出生成的编码。
* */
#include stdio.h
#includestdlib.h
#define MAXBIT 100
#define MAXVALUE 10000
#define MAXLEAF 30
#define MAXNODE MAXLEAF*2 - 1
typedef struct {
int bit[MAXBIT];
int start;} HCodeType; /* 编码结构体 */
typedef struct{
int weight;
int parent;
int lchild;
int rchild;
int value;} HNodeType; /* 结点结构体 */
/* 构造一颗哈夫曼树 */
void HuffmanTree (HNodeType HuffNode[MAXNODE], int n){
/* i 、j : 循环变量,m1 、m2 :构造哈夫曼树不同过程中两个最小权值结点的权值,
x1 、x2 :构造哈夫曼树不同过程中两个最小权值结点在数组中的序号。*/
int i, j, m1, m2, x1, x2;
/* 初始化存放哈夫曼树数组 HuffNode[] 中的结点 */
for (i=0; i2*n- 1; i++)
{
HuffNode[i].weight = 0;//权值
HuffNode[i].parent =- 1;
HuffNode[i].lchild =- 1;
1
HuffNode[i].rchild =- 1;
HuffNode[i].value=i;
//实际值,可根据情况替换为字母
} /* end for */
/* 输入 n 个叶子结点的权值 */
for (i=0; in; i++)
{
printf (Please input weight of leaf node %d: \n, i);
scanf (%d, HuffNode[i].weight);
} /* end for */
/* 循环构造 Huffman 树 */
for (i=0; in- 1; i++)
{
m1=m2=MAXVALUE;
/* m1 、m2 中存放两个无父结点且结点权值最小的两个结点 */
x1=x2=0;
/* 找出所有结点中权值最小、无父结点的两个结点,并合并之为一颗二叉树 */
for (j=0; jn+i; j++)
{
if (HuffNode[j].weight m1 HuffNod
您可能关注的文档
最近下载
- 2025年江苏经贸职业技术学院单招笔试职业能力测验试题库含答案解析.docx VIP
- 2025年-第二届全国高校教师教学创新大赛获奖课件1课程思政教学设计-新版.pptx
- 通信工程领域数智化技术的应用现状与前景.docx VIP
- (2026春新版)人教版三年级数学下册全册教案.doc
- 井筒三维可视化方法及装置.pdf VIP
- 安全隐患规范依据查询手册(2026版)-157页 (1).docx
- 2026道德与法治一年级下册全册教学设计.pdf
- 贵州省2024年高职(专科)分类考试招生中职毕业生文化综合考试数学.docx VIP
- 中央企业高质量数据集建设研究报告.pptx VIP
- 2023版马原马克思主义基本原理(2023年版)ppt全套教学课件.ppt
原创力文档

文档评论(0)