哈夫曼编码

本文详细介绍了哈夫曼编码的实现过程,包括创建哈夫曼树、为树生成编码、编码和解码字符串的方法。并通过一个示例展示了如何使用哈夫曼编码对字符串进行编码和解码。
摘要由CSDN通过智能技术生成
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct
{
	int weight;
	int parent;
	int left;
	int right;

}HuffmanTree;

typedef char * HuffmanCode;
/************************************************************************  
函数名称:SelectNode  
函数功能:得到前面i-1个结点中权重最小的两个结点,bt1, bt2
函数参数:ht是指向哈夫曼树的指针,n是创建树的叶结点的数量,w用来传入n个叶结点的权值 
函数返回:无
************************************************************************/ 
void SelectNode(HuffmanTree *ht, int n, int * bt1, int * bt2)
{
	int i;
	HuffmanTree *ht1, *ht2, *t;
	ht1 = ht2 = NULL;

	for (i = 1; i <= n; i++)
	{
		if (!ht[i].parent)
		{
			if (ht1 == NULL)//结点指针1为空
			{
				ht1 = ht + i;
				continue;
			}
			if (ht2 == NULL)
			{
				ht2 = ht + i;
				if (ht1->weight > ht2->weight)
				{
					t = ht1;
					ht1 = ht2;
					ht2 = t;
				}
				continue;
			}
		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值