哈夫曼编码解码实验
实验要求
掌握二叉树的相关概念
掌握构造哈夫曼树,进行哈夫曼编码。对编码容通过哈夫曼树进行解码。
实验容
通过二叉树构造哈夫曼树,并用哈夫曼树对读取的 txt 文件进行哈夫曼编码。编码完成后通过哈夫曼树进行解码。
#include<> #include<> #define MAX 100
// 定义哈夫曼树的存储结构
typedef struct
{
char data; int weight; int parent; int lch;
int rch;
}HuffNode;
// 定义哈夫曼编码的存储结构typedef struct
{
char bit[MAX]; int start;
}HuffCode;
HuffNode ht[2*MAX]; HuffCode hcd[MAX]; int Coun[127]={0}; int n;
char s1[200000];
char text[5000];
// 构造哈夫曼树void HuffmanTree()
{
int i,j,k,left,right,min1,min2;
//printf(" 输入叶子的节点数: ");
//scanf("%d",&n);
printf(" 字符数量 =%d\n",n); for(i=1;i<=2*n-1;i++)
{
ht[i].parent=ht[i].lch=ht[i].rch=0;
} j=0;
for(i=1;i<=n;i++)
{
/*getchar();
printf(" 输入第 %d个叶子节点的值: ",i); scanf("%c",&ht[i].data);
printf(" 输入该节点的权值: "); scanf("%d",&ht[i].weight);
*/
for(;j<127;j++)
{
if(Coun[j]!=0)
{
}
}
j++;
}
ht[i].data=j;
//printf("%c",ht[i].data); ht[i].weight=Coun[j];
//printf("%d",ht[i].weight);
break;
printf("\n"); for(i=1;i<=n;i++)
{
printf("%c",ht[i].data);
}
printf("\n"); for(i=n+1;i<=2*n-1;i++)
{// 在前 n 个结点中选取权值最小的两个结点构成一颗二叉树
min1=min2=10000;// 为 min1 和 min2 设置一个比所有权值都大的值
left=right=0; for(k=1;k<=i-1;k++)
{
if(ht[k].parent==0)// 若是根结点
// 令 min1 和 min2 为最小的两个权值, left 和 right
为权值最小的两个结点位置
if(ht[k].weight<min1)
{
min2=min1; right=left; min1=ht[k].weight; left=k;
}
e
哈夫曼编码解码实验报告 来自淘豆网www.taodocs.com转载请标明出处.