C语言大作业(基于哈夫曼树的压缩程序).doc

C语言大作业(基于哈夫曼树的压缩程序).doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C语言大作业(基于哈夫曼树的压缩程序)

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

文档评论(0)

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

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档