欢迎来到天天文库
浏览记录
ID:55039629
大小:64.44 KB
页数:14页
时间:2020-04-26
《数据结构课程设计-哈夫曼树.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、成绩评定教师签名嘉应学院计算机学院实验报告课程名称:数据结构课程设计开课学期:2017-2018学年第2学期班级:指导老师:实验题目:哈夫曼树学号:姓名:上机时间:一、实验目的本实验的目的是通过对简单的哈夫曼编/译码系统的设计与实现来熟练掌握树形结构在实际问题中的应用。二、实验问题描述利用哈夫曼编码进行通信可以大大提高通信利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码,此试验即设计这样的一个简单的编/译码系统。系统应该具备如下的几个功能。1、求出各个叶子节点的权重值输入一个字符串,统计其中各
2、个字母的个数和总的字母个数。2、构造哈夫曼树统计出的字母种类为叶子结点个数,每个字母个数为相应的权值,建立哈夫曼树。3、打印哈弗曼树的功能模块按照一定形式打印出哈夫曼树。4、编码利用已经建立好的哈夫曼树进行编码。5、译码根据编码规则对输入的代码进行翻译并将译码。三、实验步骤1、实验问题分析(1)设计一个结构体数组保存字母的类型和个数。typedefstruct{charch;//字母的种类intnum;//字母的个数}inf;(2)在构造哈夫曼树时,设计一个结构体数组Hufftree保存哈夫曼树中各结点的信息,根据二叉树的性质可知,具有n个结点的哈夫曼树共有2n-1个
3、结点,所以数组大小设置为2n-1,描述结点的数据类型为:typedefstruct{intweight;//权值intparent;//双亲intlchild;//左孩子intrchild;//右孩子}Hnodetype;typedefHnodetypeHufftree[maxnode];//定义此类型的数组(1)求哈夫曼编码,实质上是在已经建立的哈夫曼树中,从叶子结点开始,沿着结点的双亲链表域退回到根节点,每退回一步,就走过了哈夫曼树的一个分支,从而得到一位哈夫曼值,由于一个字符的哈夫曼编码是从根结点所经过的路径上各分支所组成的0、1序列,因此先得到的分支代码为所求
4、编码的低位码,后得到的分支代码为所求编码的高位码,所以设计如下的数据类型:constintmaxbit=10;typedefstruct{intbit[maxbit];//每个结点的哈夫曼编码intstart;//开始位置}Hcodetype;(2)设置全局变量。strings;//s为输入的字符串intn=0;//记录输入的字符串中字母的种类,即叶子结点个数intv=0;//记录字符串中字母的总个数infinfo[maxleaf];//叶子结点类型2、功能(函数)设计(1)统计字母种类和个数模块此模块的功能为从键盘接受一个字符串,统计字符串中字母种类即结点个数,每种
5、字母出现次数即各叶子结点的权值。全局变量s保存输入的字符串,将种类和个数保存到info[maxleaf]中。函数原型:voidfundchar()如输入的字符串是“sddfffgggg”则显示如下。(1)哈夫曼树的建立模块此模块的功能为从(1)中计算出的结点个数和各个叶子结点的权值构造一棵哈弗曼树。函数原型:Hnodetype*huffmantree()//函数返回结点类型的数组(2)打印哈弗曼树的功能模块此模块的功能是将由(2)建立的哈弗曼树按照一定规则打印在屏幕上。函数原型:voidprint(Hnodet
6、ype*hufftree)如输入的字符串是”sddfffgggg”,则构造的哈夫曼树为(3)建立哈夫曼编码的功能模块此模块功能为将(2)中建立的哈夫曼树进行哈弗曼编码,然后将字符与对应的0、1代码串打印到屏幕上。函数原型:voidhuffmancode(Hnodetype*hufftree)如输入的字符串是“sddfffgggg”,则每个字母的代码和输入的字符串的哈夫曼编码是(1)译码的功能模块此模块的功能为接收需要译码的0和1代码串,按照(4)中建立的编码规则将其翻译成字符集中字符所组成的字符串形式,并将翻译的结果在屏幕上打印出来。函数原型:voidtranslat
7、ion(Hnodetype*hufftree)如输入的代码串是“”,则对应的字符串是“sdfg”四、实验结果(程序)及分析1、实验主要模块代码(一)函数功能:统计字母种类和个数模块voidfundchar(){intk,m;cout<<"请输入字符串"<>s;//s为输入的字符串while(s[v]){v++;}cout<<"共有字符"<
此文档下载收益归作者所有