哈夫曼树的构造和应用

哈夫曼树的构造和应用

ID:1804226

大小:322.00 KB

页数:10页

时间:2017-11-13

哈夫曼树的构造和应用_第1页
哈夫曼树的构造和应用_第2页
哈夫曼树的构造和应用_第3页
哈夫曼树的构造和应用_第4页
哈夫曼树的构造和应用_第5页
资源描述:

《哈夫曼树的构造和应用》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、《计算机软件技术基础》实验报告实验名称:实验三哈夫曼树的应用和实现实验目的:掌握哈夫曼树的基本构造,并能运用哈夫曼树实现前缀编码。实验内容:完成下述功能:(1)根据输入的字符和相应的权重建立哈夫曼树,并输出已经建立的相应内容作为检查;(2)运用哈夫曼树实现前缀编码,并输出各字符的编码串;(3)输入一组二进制报文,进行译码,并输出译文。实验要求:(1)数据元素为字符,其相应的权值为float;(2)对实验内容进行算法设计,将编制的程序输入计算机,编译运行;(3)程序的实际功能与上述所列功能不完全相符,调试程序,找出问题所在,并纠正。(4)以教材中P162的例为数据,验证结果,

2、并给出相应的说明。实验原理:哈夫曼树的构造和应用(流程图)。1,建立哈夫曼树,2,构建哈夫曼编码表第9页共25页,3,译码过程是编码的逆过程,算法流程图此处省略。第9页共25页编译环境:PC中C++实验调试及分析处理:1,实验调试过程中出现以下错误:分析处理:程序运行出现上述错误,调试很久后发现,此问题主要是在调用译码函数时出错,原因是译码函数与主函数之间数据传递出现问题,修改后问题得到解决。2,实验调试过程中出现以下错误:分析处理:程序运行出现上述错误,明显与书本上的例题运行结果不一致,程序也没发现什么大的错误,与同学讨论后发现原因,if(ht[j].parent==0&

3、&m1>ht[j].weight){m2=m1;k2=k1;m1=ht[j].weight;k1=j;}elseif(ht[j].parent==0&&m2>ht[j].weight)这段程序应该改成if(ht[j].parent==0&&(m1-ht[j].weight)>=0.000001){m2=m1;k2=k1;m1=ht[j].weight;k1=j;第9页共25页}elseif(ht[j].parent==0&&(m2-ht[j].weight)>=0.000001)。改完以后运行结果与课本一致。3,实验调试过程中出现以下错误:分析处理:程序运行中出现错误,主要

4、是未理解scanf函数的应用,输入时若是一串二进制数字相邻输入,会当成一个数字读入,导致出错,修改输入方式后,再次运行这个错误消除。第9页共25页实验结果:1,哈夫曼树的构造,并输出已经建立的相应内容作为检查;2,运用哈夫曼树实现前缀编码,并输出各字符的编码串第9页共25页3.输入一组二进制报文,进行译码,并输出译文。实验结果分析及总结这次实验的收获主要是对哈夫曼树的结构有了更深入的理解,以及利用哈夫曼树的前缀编码,这是本课程的重点,应该注重学习。本次实验结果基本正确,能完全实现实验要求的功能,但也存在不足的地方,如运行界面不美观,程序语句不精练,有些地方可以更加简单等等。

5、这些都需要我在以后的实验中着重注意并加以学习,另外,这次实验编程个人所花时间较长,这说明我对知识点不够熟悉,掌握程度不够,在今后的学习中应该更加严谨,虚心向同学学习,不懂的地方应该先自己理解再交流。参考资料:《计算机软件技术基础教程》,刘彦明;《C语言设计》。第9页共25页附:实验三哈夫曼树的应用和实现源程序。#include"stdio.h"#definemaxbit10/*定义哈夫曼编码最大长度*/#definemaxvalue10000/*定义最大权值常量*/#definemaxnodenumber100/*定义结点最大数目常量*/typedefstruct/*定义结

6、点结构*/{floatweight;chardata;intparent,lchild,rchild;}htnode;typedefstruct/*定义保存一个叶子结点哈曼编码的结构*/{intbit[maxbit];intstart;}hcodetype;hcodetypecd[maxbit];voidmain()/*主函数*/{voidhuffmancode(htnodeht[],intn);voidhuffmandecode(hcodetypecd[],htnodeht[],intn);htnodeht[maxnodenumber];inti,j,k1,k2,n,a;

7、floatm1,m2;printf("哈夫曼树的构造及应用");printf("请输入叶子数目n:");/*提示输出叶子结点个数*/scanf("%d",&n);printf("Pleaseinputdataandweight:");/*提示输出各叶子结点的权值*/for(i=0;i<2*n-1;i++){ht[i].weight=0.00000;ht[i].data='0';ht[i].parent=0;ht[i].lchild=0;ht[i].rchild=0;}for(i=0;i

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。