欢迎来到天天文库
浏览记录
ID:50137988
大小:363.00 KB
页数:9页
时间:2020-03-05
《哈夫曼编码解码实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、.哈夫曼编码解码实验1.实验要求掌握二叉树的相关概念掌握构造哈夫曼树,进行哈夫曼编码。对编码内容通过哈夫曼树进行解码。2.实验内容通过二叉树构造哈夫曼树,并用哈夫曼树对读取的txt文件进行哈夫曼编码。编码完成后通过哈夫曼树进行解码。#include#include#defineMAX100//定义哈夫曼树的存储结构typedefstruct{chardata;intweight;intparent;intlch;intrch;}HuffNode;//定义哈夫曼编码的存储结构typed
2、efstruct{charbit[MAX];intstart;}HuffCode;HuffNodeht[2*MAX];HuffCodehcd[MAX];intCoun[127]={0};intn;chars1[200000];chartext[5000];//构造哈夫曼树voidHuffmanTree(){Word文档.inti,j,k,left,right,min1,min2;//printf("输入叶子的节点数:");//scanf("%d",&n);printf("字符数量=%d",n);for(i=1;i<=
3、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=C
4、oun[j];//printf("%d",ht[i].weight);break;}}j++;}printf("");for(i=1;i<=n;i++){printf("%c",ht[i].data);}printf("");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)//
5、若是根结点//令min1和min2为最小的两个权值,left和rightWord文档.为权值最小的两个结点位置if(ht[k].weight6、[i].lch=left;ht[i].rch=right;}}//构造哈夫曼编码voidHuffmanCode(){inti,c,k,f;HuffCodecd;for(i=1;i<=n;i++){cd.start=n;c=i;f=ht[i].parent;while(f!=0){if(ht[f].lch==c)cd.bit[cd.start]='0';elsecd.bit[cd.start]='1';cd.start--;c=f;f=ht[f].parent;}Word文档.hcd[i]=cd;}printf("输出哈夫7、曼编码:");for(i=1;i<=n;i++){printf("%c:",ht[i].data);for(k=hcd[i].start+1;k<=n;k++)printf("%c",hcd[i].bit[k]);printf("");}}//对字母进行编码voidCode()//将字符与相应的哈夫曼编码进行匹配,输出编码结果{inti=0,j,k,h=0;while(text[i]!=' '){for(j=1;j<=n;j++){if(text[i]==ht[j].data){for(k=hcd[j].sta8、rt+1;k<=n;k++){s1[h]=hcd[j].bit[k];h++;}break;}}i++;}//printf("编码");//puts(s1);//printf("");}Word文档.//解码voidHuffmanDecode(){printf("解码");intlen,i,f;charC
6、[i].lch=left;ht[i].rch=right;}}//构造哈夫曼编码voidHuffmanCode(){inti,c,k,f;HuffCodecd;for(i=1;i<=n;i++){cd.start=n;c=i;f=ht[i].parent;while(f!=0){if(ht[f].lch==c)cd.bit[cd.start]='0';elsecd.bit[cd.start]='1';cd.start--;c=f;f=ht[f].parent;}Word文档.hcd[i]=cd;}printf("输出哈夫
7、曼编码:");for(i=1;i<=n;i++){printf("%c:",ht[i].data);for(k=hcd[i].start+1;k<=n;k++)printf("%c",hcd[i].bit[k]);printf("");}}//对字母进行编码voidCode()//将字符与相应的哈夫曼编码进行匹配,输出编码结果{inti=0,j,k,h=0;while(text[i]!=' '){for(j=1;j<=n;j++){if(text[i]==ht[j].data){for(k=hcd[j].sta
8、rt+1;k<=n;k++){s1[h]=hcd[j].bit[k];h++;}break;}}i++;}//printf("编码");//puts(s1);//printf("");}Word文档.//解码voidHuffmanDecode(){printf("解码");intlen,i,f;charC
此文档下载收益归作者所有