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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构哈夫曼编码实验报告Word文件下载.docx

1、unsigned char b; /记录字符long count; /权重int parent,lch,rch; /定义双亲,左孩子,右孩子char bits256; /存放哈夫曼编码的数组header512,tmp; /头部一要定设置至少512个,因为结点最多可达256,所有结点数最多可达511三、算法设计输入要压缩的文件读文件并计算字符频率根据字符的频率,利用Huffman编码思想创建Huffman树由创建的Huffman树来决定字符对应的编码,进行文件的压缩解码压缩即根据Huffman树进行译码设计流程图如图1.1所示。 图1.1 设计流程图(1)压缩文件输入一个待压缩的文本文件名称(可

2、带路径)如:D:lulu.txt统计文本文件中各字符的个数作为权值,生成哈夫曼树;将文本文件利用哈夫曼树进行编码,生成压缩文件。压缩文件名称=文本文件名.COD 如:lulu.COD压缩文件内容=哈夫曼树的核心内容+编码序列for(int i=0;i256;i+) headeri.count=0; /初始化权重 headeri.b=(unsigned char)i; /初始化字符ifstream infile(infilename,ios:in|ios:binary);while(infile.peek()!=EOF) infile.read(char *)&temp,sizeof(unsig

3、ned char); /读入一个字符 headertemp.count+; /统计对应结点字符权重 flength+; /统计文件长度infile.close(); /关闭文件for(i=0;256-1;i+) /对结点进行冒泡排序,权重大的放在上面,编码时效率高 for(int j=0;j256-1-i;j+) if(headerj.countheaderj+1.count) tmp=headerj; headerj=headerj+1; headerj+1=tmp; if(headeri.count=0) break;leafnum=i; /取得哈夫曼树中叶子结点数pointnum=2*l

4、eafnum-1; /取得哈夫曼树中总结点数目infile.open(infilename,ios: /打开待压缩的文件infile.clear();infile.seekg(0);ofstream outfile(outfilename,ios:out|ios: /打开压缩后将生成的文件outfile.write(char *)&flength,sizeof(long); /写入原文件长度(2)哈夫曼编码leafnum; outfile.write(char *)&headeri.b,sizeof(unsigned char); /写入字符 headeri.count=strlen(head

5、eri.bits); /不再设置其他变量,权值这时已无使用价值,可以用相应结点的权值变量记录长度headeri.count,sizeof(unsigned char); /写入长度的ASCII码 if(headeri.count%8=0) bytelen=headeri.count/8; else bytelen=headeri.count/8+1; strcat(headeri.bits,0000000); /在编码后面补0,使其最后凑满8的倍数, /超过无妨,可以用bytelen控制好写入字节的长度bytelen; temp=ctoa(headeri.bits); strcpy(heade

6、ri.bits,headeri.bits+8); cout该文件的哈夫曼的编码为:endl; for(i=0;flength;headeri.bits /此循环结束后就完成了编码对照表的写入(3) 解压文件输入一个待解压的压缩文件名称(可带路径 )如:lulu.COD从文件中读出哈夫曼树,并利用哈夫曼树将编码序列解码;生成(还原)文本文件。文件文件名称=压缩文件名+_new.txt如:lulu_new.txtwhile(1) while(readlen(clength-8)&strlen(buf)=256) /处理缓冲区,直到少于256位,再读满它strlen(buf); strcpy1(bu

7、f1,buf,i+1); /逐渐增多取,放入buf1,进行匹配 if(strcmp1(buf1,header,n,temp)=1) writelen+; strcpy(buf,buf+i+1); /缓冲区前移 break; /for if(writelen=flength) break; /如果写入达到原文件长度,退出 if(readlen=(clength-8)/*编码长度*/|writelen /如果写入或者读入编码完毕,退出/退出此循环后,还有未解码完成的buf/对buf缓冲的善后处理while(writelenflength)outfile.close();四、界面设计 程序包含压缩功

8、能,解压功能,输出功能,帮助,终止程序功能。五、运行测试与分析(1)运行程序,显示提示,如图1.2所示。图1.2 启动界面(2)编码操作。 图1.3在D盘中建立一个文本文档,并命名为123.txt图1.4文件压缩,输出哈弗曼编码界面图1.5在盘中生成一个COD的文档,并且名为12.COD: (3)解码操作。根据实验要求输出实验结果。如图1.4所示。图1.4 数据结果输出界面(4) 显示数据内容 若用户想知道文本输入的内容,可输入“L”, 然后界面提示输入文本文件的路径和文件名,完成输入后按回车键,界面会出现文本的内容。六、实验收获与思考在完成实验的过程中,使我明白了面向对象与面向对象的差别。在面向对象过程中,类的设计是至关重要的,类设计好了等于程序就成功了一半,所以这次的课程帮助我复习了这一学期面向对象课程的学习,刚好可以弥补这一学期面向对象学习的不足。同时,也使我对数据结构与算法的知识有了一定的了解,帮我在大二学习数据结构与算法的课程中奠定了一定的基础,使我以后学习数据结构与算法的时候可以更加轻松。教师评分:教师签字:

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

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