哈弗曼树实验报告.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
? 哈夫曼树及其的?应用 一、实验目的? 1.在二叉树基本操?作的基础上,掌握对二?叉树的一些其它操作的?具体实现方法。 2.?掌握构造哈夫曼树以及?哈夫曼编码的方法。 ?3、熟练掌握哈夫曼树?(最优二叉树)特征及?其应用 二、实验内容? 题目一、哈夫曼树?和哈夫曼编码: ? 从终端输入若干个?字符,统计(或指定)?字符出现的频率,将字?符出现的频率作为结点?的权值,建立哈夫曼树?,然后对各字符进行哈?夫曼编码。最后打印哈?夫曼树和对应的哈夫曼?编码。 设计要求: ?⑴ 哈夫曼殊和哈夫曼?编码的存储表示参考教?材事例 ⑵ 在程序中?构造四个子程序为 ①? int freqc?har(char *?text, HTre?e *t) //?统计字符出现的频率 ?② int crea?tehtree(HT?ree *t) //?根据字符出现的频率建?立哈夫曼树 ③ vo?id coding(?HTree *t,i?nt head_i,?char *code?)//对哈夫曼树进行?编码 ④ void ?printhtree?(HTree *t,?int head_i?,int deep,?int* path)? ///中序打印树 ? 三、实验步骤? ㈠、数据结构与核心?算法的设计描述 vo?id Frequen?t()//计算输入字?母出现的频率 voi?d Select(H?uffmanTree? HT,int i,?int s1,in?t s2) //选?择函数 voidHu?ffmanCodin?g(HuffmanT?reeHT,Huf?fmanCodeH?C,int *w,i?nt n) //?w存放n个权值, 构?造哈夫曼树p, 并求?出哈夫曼编码hc并输?出哈弗曼编码 ㈡、函?数调用及主函数设计 ?主函数 主函数 Frequent( )计算输入字母出现的频率 Select(HuffmanTree HT,int i,int s1,int s2)选择函数 HuffmanCoding(HuffmanTreeHT,HuffmanCodeHC,int *w,int n) 构造哈夫曼树p, 并求出哈夫曼编码hc 打印哈弗曼树表 ㈢ 程序调试及?运行结果分析 首先调?用Frequent(?),计算输入字母出现?的频率,输入一串字符?串,并以字符#号结束?,运行结果如下: 然?后根据输入字符的个数?与出现的频率输入哈弗?曼所要编码的个数,然?后输入这几个字母的权?值,即出现的频率,运?行结果如下: 然?后输出哈弗曼树的建立?次序,哈弗曼树表以及?哈弗曼编码,结果如下?: ㈣ 实验总结? 通过这次实验使我掌?握了哈夫曼树与哈夫曼?码的转换。其中就是要?求的函数不能正确的写?出来,这次没按照实验?要求的函数写,弄了很?长时间也没弄出来,就?这样把几个函数放在一?起啦。 四、主要算法?流程图及程序清单 ? 1、主要算法流程?图: 主函数 主函数 开始界面 统计频率 构造哈夫曼树p 输出哈夫曼编码 打印哈弗曼树表 选择函数 主函数 输出数据 结束 2、程序?清单 #inclu?deiostrea?m.h #incl?udeiomani?p.h #incl?udestdlib?.h #inclu?destring.?h #includ?estdio.h? #define ?maxsize 10?0 struct f?requence//?统计频率 { ch?ar a;//存放字?符 int ?n; //该字符出现?的次数 }; typ?edef struc?t { unsig?ned int we?ight;// 用来?存放各个结点的权值 ? unsigned ?int parent?,lchild,rc?hild;//指向双?亲、 孩子结点的指针? }HTNode,*?HuffmanTre?e;//动态分配数组?存储赫夫曼树 typ?edef char ?**HuffmanC?ode;//动态分配?数组存储赫夫曼编码表? void Freq?uent() { ?frequence ?ch[27];//2?6个英文字母,0号位?置不存储字符,用来存?储总共的字符个数,多?次出现的只记一次 ?int i=0; ?for(;i=26?;i++)//初始化?结构体数组 { ? ch[i].n=0?; } cout?请输入各个字符?(输入#键结束输入)?:; char ?c; cinc?; bool fl?ag; while?(c!=#) ?{ i=1; ? flag=fals?e; for(;?i=ch[0].n?;i++) { ? if(c

文档评论(0)

a13355589 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档