1、河南师范大学软件学院软件学院设计性实验报告专业:网络工程 年级/班级: 20132014 学年第一学期课程名称 数据结构 指导教师本组成员学号姓名实验地点 实验时间项目名称 哈夫曼编/译码系统的设计与实现 实验类型 设计性一、实验目的理解哈夫曼树的特征及其应用;在对哈夫曼树进行理解的基础上,构造哈夫曼树,并用构造的哈夫曼树进行编码和译码;通过该实验,使学生对数据结构的应用有更深层次的理解。 二、实验仪器或设备学院提供公共机房,1 台/学生微型计算机。三、总体设计(设计原理、设计方案及流程等)1 问题描述:利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求
2、在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码(解码) 。对于双工信道(即可以双向传输信息的信道) ,每端都需要一个完整的编/ 译码系统。试为这样的信息收发站设计一个哈夫曼编/ 译码系统。2一个完整的系统应具有以下功能:1)初始化(Initialzation) 。从数据文件 DataFile.dat 中读入字符及每个字符的权值,建立哈夫曼树 HuffTree;2)编码(EnCoding) 。用已建好的哈夫曼树,对文件 ToBeTran.dat 中的文本进行编码形成报文,将报文写在文件 Code.txt 中;3)译码(Decoding) 。利用已建好的哈夫曼树,对文件
3、CodeFile.dat 中的代码进行解码形成原文,结果存入文件 Textfile.txt 中;4)输出(Output): 输出 DataFile.dat 中出现的字符以及各字符出现的频度(或概率) ;输出 ToBeTran.dat 及其报文 Code.txt;输出 CodeFile.dat 及其原文 Textfile.txt;要求:所设计的系统应能在程序执行的过程中,根据实际情况(不同的输入)建立DataFile.dat、ToBeTran.dat 和 CodeFile.dat 三个文件,以保证系统的通用性。四、实验步骤(包括主要步骤、代码分析等)1)编写 C语言程序#include#incl
4、ude#include #include #include#define TRUE 1#define FALSE 0#define OK 1河南师范大学软件学院#define ERROR 0#define INFEASIBLE -1typedef struct char data;int weight;int parent,lchild,rchild;HTNode,*HuffmanTree;typedef char *HuffmanCode;void HuffmanCoding(HuffmanTree int m,c,f,j;HuffmanTree p;int i,s1,s2,start;ch
5、ar *cd;m=2*n-1; /m为结点数,n 为叶子数HT=(HuffmanTree)malloc(m+1)*sizeof(HTNode);p=HT;p+;for(i=1;idata=di; /=*d,*w,0,0,0;p-weight=wi;p-parent=0;p-lchild=0;p-rchild=0;for (i=n+1;idata=#; p-weight=0;p-parent=0;p-lchild=0;p-rchild=0; s1=1;s2=2;for(i=n+1;iHTi.weightif(HTs1.weightHTs2.weight)t=s1;s1=s2;s2=t;for(i
6、=1;iHTi.weight*/for(i=1;istr;/t=HT; /t为树的指向各节点的指针for(i=0;idata;di=data;河南师范大学软件学院printf(“请输入%d 次位权n:“,n);for (i=1;iwei;wi=wei;num=2*n-1;HuffmanCoding(HT,HC,d,w,n);translation(HT,num);2)程序分析此实验是构造哈夫曼树,求出哈夫曼编码然后输出构造哈夫曼树的算法操作时选出两棵根节点的权值最小的一颗树的左右子树,且置新树的根节点的权值为其左右子树上根节点的权值之和,根据哈夫曼树求出带权路径的算法操作是用递归调用的方法。在此实验的操作过程中要注意构造哈夫曼树的方法,因为在此操作的过程中用的的指针变量特别多,容易混淆。3)运行结果举例五、结果分析与总结1)在做这个实验时前期要做很多准备,因为这个实验操作很复杂,虽然老师已经讲过了大致构思和算法思想,课本上也有相关算法及其伪代码,但翻译成 C语言的过程要注意语法等原因,所以要查找一些资料。2)对于不懂得地方要像其他同学虚心请教。河南师范大学软件学院3)哈夫曼编码很考验编程者的细心程度,而且涉及的问题也很复杂,培养了我们的细心和耐心。教师签名:年 月 日