- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
- ebayapi开发.doc
- PID过程控制课程设计报告.doc
- 《新课程教学设计与案例教学》试题.doc
- 孝感市2011届高三第三次统考生物试题.doc
- XXXX公司动力应急抢修队管理办法.doc
- 美术色彩的明度教案设计.doc
- 小学五年级科学课第四单元复习课.ppt
- 国外课改:差异与均衡——美国典型高中物理教材设计特点分析.doc
- 信息技术竞赛数据排序.ppt
- 2011级1班月测家长会.ppt
- DB44_T 2611-2025 城市排水管网有毒有害气体监测与风险分级管理技术标准.pdf
- DB44_T 2612-2025 竞赛类科普活动策划与实施服务规范.pdf
- DB43_T 2947-2024 烟草种子质量控制规程.pdf
- DB37_T 4836-2025 煤矿风量实时监测技术要求.pdf
- 叉车防撞系统,全球前22强生产商排名及市场份额(by QYResearch).docx
- 超滤膜,全球前18强生产商排名及市场份额(by QYResearch).docx
- DB62T 4172-2020 玉米品种 酒623规范.pdf
- DB62T 4160-2020 在用真空绝热深冷压力容器综合性能在线检测方法.pdf
- DB62T 4164-2020 辣椒品种 酒椒1号.pdf
- DB62T 4133-2020 公路隧道地质超前预报机械能无损探测技术规程.pdf
文档评论(0)