哈夫曼树与哈夫曼编码

该博客介绍了如何构建哈夫曼树并进行哈夫曼编码。内容包括根据节点数量输入构建过程,详细展示了如何找到最小两个节点进行合并,并最终得出各字符的哈夫曼编码。
摘要由CSDN通过智能技术生成
#include<stdio.h>
typedef struct{ //节点的结构 
	unsigned int weight;
	unsigned int parent,lchild,rchild;
}HTNode,*HuffmanTree;

typedef char **HuffmanCode; //动态分配数组存储哈夫曼编码表

//构造哈夫曼树,并求哈夫曼编码 
HuffmanCode HuffmanCoding(HuffmanTree HT,HuffmanCode HC,int *w,int n){
	HuffmanTree p; 
	int start;
	unsigned f;
	unsigned c;
	char *cd;
	int m,i,j,s1,s2,m1,m2;
	if(n<=1)
		return 0;
	m =  2*n-1; //哈夫曼树共m个节点
	HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode)); /* 0号单元未用  */
	for(p = HT+1,i=1 ;i<=n; ++i,++p,++w){ //从一号到n号开始填表格 
		(*p).weight = *w; //赋权值
		(*p).parent = 0;
		(*p).lchild = 0;
		(*p).rchild = 0;
	} 
	for(;i<=m;++i,++p)
		(*p).parent = 0;  //从i从n+1到m 其余的节点双亲都是0
	//开始建造哈夫曼树
	for(i=n+1;i<=m;++i){
		s1=s2=0;
		m1 = m2 = 10000;
		for(j=1;j<=i-1;j++){
			if(HT[j].weight<m1 &
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值