1 / 9
文档名称:

哈夫曼编码解码实验报告.doc

格式:doc   大小:365KB   页数:9页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

哈夫曼编码解码实验报告.doc

上传人:2286107238 2020/4/16 文件大小:365 KB

下载得到文件列表

哈夫曼编码解码实验报告.doc

文档介绍

文档介绍:哈夫曼编码解码实验实验要求掌握二叉树的相关概念掌握构造哈夫曼树,进行哈夫曼编码。对编码容通过哈夫曼树进行解码。实验容通过二叉树构造哈夫曼树,并用哈夫曼树对读取的txt文件进行哈夫曼编码。编码完成后通过哈夫曼树进行解码。#include<>#include<>#defineMAX100//定义哈夫曼树的存储结构typedefstruct{ chardata; intweight; intparent; intlch; intrch;}HuffNode;//定义哈夫曼编码的存储结构typedefstruct{ charbit[MAX]; intstart;}HuffCode;HuffNodeht[2*MAX];HuffCodehcd[MAX];intCoun[127]={0};intn;chars1[200000];chartext[5000];//构造哈夫曼树voidHuffmanTree(){ inti,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) { ht[i].data=j; //printf("%c",ht[i].data); ht[i].weight=Coun[j]; //printf("%d",ht[i].weight); break; } } j++; } 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; } elseif(ht[k].weight<min2) { min2=ht[k].weight; right=k; } } ht[left].parent=i; ht[right].parent=i; ht[i].weight=ht[left].weight+ht[right].weight; ht[i].lch=left; ht[i].rch=right; }}//构造哈夫