资源描述:
《数据结构哈夫曼编码实验》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、线性表及其应用——哈夫曼编码实验四/第一组数据结构课程实验报告姓名:孙越学号:070612020安庆师范学院2012计算机卓越班10/10线性表及其应用——哈夫曼编码实验四/第一组目录一、【实验目的】3二、【问题描述】3三、【基本要求】3四、【实验环境】3五、【测试数据及其结果】3六、【实验源代码】5安庆师范学院2012计算机卓越班10/10线性表及其应用——哈夫曼编码实验四/第一组一、【实验目的】设计一个哈夫曼编/译码器。二、【问题描述】利用赫夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。这要求在发送端通过一个编码系统对待传输数据预先编码,在接收端将传来的
2、数据进行译码(复原)。对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统。试为这样的信息收发站编写一个赫夫曼码的编/译码系统。三、【基本要求】(1)I:初始化(Initialization)。从终端读入字符集大小n,以及n个字符和n个权值,建立赫夫曼树,并将它存于文件hfmTree中。(2)E:编码(Encoding)。利用已建好的赫夫曼树(如不在内存,则从文件hfmTree中读入),对文件ToBeTran中的正文进行编码,然后将结果存入文件CodeFile中。(3)D:译码(Decoding)。利用已建好的赫夫曼树将文件CodeFile中的代码进行译码,结果
3、存入文件Textfile中。(4)P:印代码文件(Print)。将文件CodeFile以紧凑格式显示在终端上,每行50个代码。同时将此字符形式的编码文件写入文件CodePrin中。(5)T:印赫夫曼树(Treeprinting)。将已在内存中的赫夫曼树以直观的方式(比如树)显示在终端上,同时将此字符形式的赫夫曼树写入文件TreePrint中。四、【实验环境】WindowsXP,VC++6.0五、【测试数据及其结果】安庆师范学院2012计算机卓越班10/10线性表及其应用——哈夫曼编码实验四/第一组安庆师范学院2012计算机卓越班10/10线性表及其应用——哈夫曼编码实验四/第一组六、
4、【实验源代码】#include#include#include#includestructcode{chara;intw;intparent;intlchild;intrchild;};voidcreation(code*p,intn,intm);//建立哈夫曼树voidcoding(code*p,intn);//编码voidtranslate(char**hc,code*p,intn);//译码安庆师范学院2012计算机卓越班10/10线性表及其应用——哈夫曼编码实验四/第一组voiddisplay(co
5、de*p,intn,intm);//输出函数voidmain(){inti,n,m;code*ht;printf("字符的数量:(请输入一个大于的数字,输入多个数字则按第一个数字运行)");while(scanf("%d",&n)!=1
6、
7、n<0
8、
9、n>9999){printf("重新输入:");fflush(stdin);}m=2*n-1;ht=(code*)malloc((m+1)*sizeof(code));for(i=1;i<=n;i++){printf("输入编码中的字符(请输入一个字母):");fflush(stdin);scanf("%c",&ht[i]
10、.a);while(!(ht[i].a>'a'
11、
12、ht[i].a<'z'
13、
14、ht[i].a>'A'
15、
16、ht[i].a<'Z')){printf("重新输入:");fflush(stdin);scanf("%c",&ht[i].a);}printf("输入字符的权值(请输入一个数字):");while(scanf("%d",&ht[i].w)!=1
17、
18、ht[i].w<0
19、
20、ht[i].w>9999){printf("重新输入:");fflush(stdin);}ht[i].lchild=0;ht[i].rchild=0;ht[i].parent=0;}for(i=n+1;i
21、<=m;i++){ht[i].a='*';ht[i].w=0;ht[i].lchild=0;ht[i].rchild=0;ht[i].parent=0;}安庆师范学院2012计算机卓越班10/10线性表及其应用——哈夫曼编码实验四/第一组creation(ht,n,m);printf("请按回车进入哈夫曼树对应界面");getchar();getchar();system("cls");display(ht,n,m);printf("请按回车进入编码对