ImageVerifierCode 换一换
格式:DOCX , 页数:10 ,大小:269.51KB ,
资源ID:8871582      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8871582.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(哈夫曼树的构造和应用.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

哈夫曼树的构造和应用.docx

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

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

3、2=k1; m1=htj.weight;k1=j; else if(htj.parent=0&m2htj.weight)这段程序应该改成if(htj.parent=0&(m1-htj.weight)=0.000001) m2=m1;k2=k1; m1=htj.weight;k1=j; else if(htj.parent=0&(m2-htj.weight)=0.000001)。改完以后运行结果与课本一致。3,实验调试过程中出现以下错误: 分析处理:程序运行中出现错误,主要是未理解scanf函数的应用,输入时若是一串二进制数字相邻输入,会当成一个数字读入,导致出错,修改输入方式后,再次运行这个错

4、误消除。实验结果:1,哈夫曼树的构造,并输出已经建立的相应内容作为检查;2,运用哈夫曼树实现前缀编码,并输出各字符的编码串3. 输入一组二进制报文,进行译码,并输出译文。实验结果分析及总结 这次实验的收获主要是对哈夫曼树的结构有了更深入的理解,以及利用哈夫曼树的前缀编码,这是本课程的重点,应该注重学习。本次实验结果基本正确,能完全实现实验要求的功能,但也存在不足的地方,如运行界面不美观,程序语句不精练,有些地方可以更加简单等等。这些都需要我在以后的实验中着重注意并加以学习,另外,这次实验编程个人所花时间较长,这说明我对知识点不够熟悉,掌握程度不够,在今后的学习中应该更加严谨,虚心向同学学习,不

5、懂的地方应该先自己理解再交流。参考资料:计算机软件技术基础教程,刘彦明;C语言设计。附:实验三 哈夫曼树的应用和实现 源程序。#includestdio.h#define maxbit 10 /*定义哈夫曼编码最大长度*/#define maxvalue 10000 /*定义最大权值常量*/#define maxnodenumber 100 /*定义结点最大数目常量*/typedef struct /*定义结点结构*/ float weight; char data; int parent,lchild,rchild; htnode;typedef struct /*定义保存一个叶子结点哈曼编

6、码的结构*/int bitmaxbit; int start; hcodetype;hcodetype cdmaxbit;void main() /*主函数*/void huffmancode(htnode ht,int n); void huffmandecode(hcodetype cd,htnode ht,int n); htnode htmaxnodenumber; int i,j,k1,k2,n,a; float m1,m2; printf( 哈夫曼树的构造及应用n); printf(请输入叶子数目 n: ); /*提示输出叶子结点个数*/ scanf(%d,&n); printf(

7、Please input data and weight:n); /*提示输出各叶子结点的权值*/ for(i=0;i2*n-1;i+) hti.weight=0.00000; hti.data=0; hti.parent=0; hti.lchild=0; hti.rchild=0; for(i=0;in;i+) fflush(stdin); scanf(%c %f,&hti.data,&hti.weight); for(i=0;in-1;i+) m1=maxvalue; m2=maxvalue; k1=0;k2=0; for(j=0;j=0.000001) m2=m1;k2=k1; m1=h

8、tj.weight;k1=j; else if(htj.parent=0&(m2-htj.weight)=0.000001) m2=htj.weight;k2=j; htk1.parent=n+i; htk2.parent=n+i; htn+i.weight=htk1.weight+htk2.weight; htn+i.lchild=k1; htn+i.rchild=k2; printf(n构造的哈夫曼树如下:n); printf(n);printf(数组下标 lchild data weight rchlid parent n); for(i=0;i2*n-1;i+) printf( %d

9、%d %c %f %d %dn,i,hti.lchild,hti.data,hti.weight,hti.rchild,hti.parent); printf(The data and the bits is as follows:n); huffmancode(ht,n); /*调用函数*/ printf(请输入一组需要译码的二进制报文(单个数字之间请用空格隔开,如1011应该输入1 0 1 1 ,以-1结尾):n); huffmandecode(cd,ht,n); /*调用函数*/ void huffmancode(htnode ht,int n)/*对具有n个叶子结点的哈夫曼树ht,求所

10、有叶子结点的哈夫曼编码并输出*/int i,j,c,p,m,k; char ch100; hcodetype cd100; for(i=0;in;i+) c=i;j=maxbit; do j-; p=htc.parent; if(htp.lchild=c) cdi.bitj=0; else cdi.bitj=1; c=p; while(p!=0); cdi.start=+j; for(i=0;in;i+) printf(data:%c bits:,hti.data); for(j=cdi.start;jmaxbit;j+) printf(%d,cdi.bitj); printf(n); void huffmandecode(hcodetype cd,htnode ht,int n) int i,c,p,b;int endflag=-1;i=2*n-2;scanf(%d,&b);printf(译码的结果如下:n);while(b!=endflag) if(b=0) i=hti.lchild; else i=hti.rchild; if(hti.lchild=0) printf(%c,hti.data); i=2*n-2; scanf(%d,&b);printf(n);if(hti.lchild!=0)&(i!=2*n-2) printf(n ERRORn);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1