C语言大作业(基于哈夫曼树的压缩程序).doc_第1页
C语言大作业(基于哈夫曼树的压缩程序).doc_第2页
C语言大作业(基于哈夫曼树的压缩程序).doc_第3页
C语言大作业(基于哈夫曼树的压缩程序).doc_第4页
C语言大作业(基于哈夫曼树的压缩程序).doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2009级高级语言程序设计大作业上机报告题目:基于哈弗曼算法的压缩参与人员:【姓名】 【学号】问题定义 压缩机解压的实现开发工具 DEV-C+数据结构 struct head unsigned char b; /*记录字符在数组中的位置*/ long count; /*字符出现频率(权值)*/ long parent,lch,rch; /*定义哈夫曼树指针变量*/ char bits256; /*定义存储哈夫曼编码的数组*/header512,tmp;tmp 用于交换值header512 用于储存数据filename255 用于储存文件地址算法描述本程序是基于哈弗曼编码的程序主要分为两个函数: 压缩函数 void compress() 解压函数 void uncompress() 主要流程如下主函数 统计字符,得出统计出的字符的权值n编码解码退出根据权值进行建立哈夫曼树输出哈夫曼树输出编码压缩编码生成文件解压生成新的文件算法描述main函数入口执行compress()执行uncompress()结束输入1输入2compress()函数输入文件地址地址存在u输入压缩后文件地址打印错误入口地址存在u压缩(具体见代码注释)打印错误打印压缩成功输出文件压缩算法1打开文件2逐个读取文件的ASCII码,储存在c,统计频率fread(&c,1,1,ifp);headerc.count+;3每个哈夫曼码值及其对应的ASCII码存放在一维数组headeri中if(headeri.count!=0) headeri.b=(unsigned char)i;4据频率(权值)大小,对结点进行排序5构建哈曼树,亚此选择权值最小的入树6计算权值大小7从文件开始将字符编码每8各编入一个字节,剩下超过4位再编入下一个,少于4位,则放入新字节uncompress()函数入口输入文件地址地址存在u输入压缩后文件地址打印错误地址存在u解压(具体见程序注释)打印错误输入解压成功解压算法1读取原文件长度,对文件进行定位fread(&flength,sizeof(long),1,ifp);2取原文件字符的权值p=(long)c;3将 f转换为二进制表示的字符串itoa(f,buf,2);4据哈夫曼编码的长短,对结点进行排序5根据哈夫曼编码的长短,对结点进行排序6通过哈夫曼编码的长短,依次解码,从原来的位存储还原到字节存储7在单字节内对相应位置补08从压缩文件中的按位存储还原到按字节存储字符; 字符位置不改变程序调试情况 1主界面2解压测试原文件压缩压缩得到的文件解压测试解压后的文件错误测试文件不存在参考书籍:数据结构 李春葆著 清华大学

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论