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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
解压算法
1读取原文件长度,对文件进行定位
fread(&flength,sizeof(long),1,ifp);
2取原文Байду номын сангаас字符的权值
p=(long)c;
3将f转换为二进制表示的字符串
itoa(f,buf,2);
4据哈夫曼编码的长短,对结点进行排序
5根据哈夫曼编码的长短,对结点进行排序
6通过哈夫曼编码的长短,依次解码,从原来的位存储还原到字节存储
long parent,lch,rch; /*定义哈夫曼树指针变量*/
char bits[256]; /*定义存储哈夫曼编码的数组*/
}
header[512],tmp;
tmp 用于交换值
header[512]用于储存数据
filename[255]用于储存文件地址
[算法描述]
本程序是基于哈弗曼编码的程序
7在单字节内对相应位置补0
8从压缩文件中的按位存储还原到按字节存储字符;字符位置不改变
程序调试情况
1主界面
2解压测试
原文件
压缩
压缩得到的文件
解压测试
解压后的文件
错误测试
文件不存在
参考书籍:
《数据结构》李春葆著清华大学出版社
程序源代码http://zhidao.baidu.com/question/7777030.html?si=3
if(header[i].count!=0) header[i].b=(unsigned char)i;
4据频率(权值)大小,对结点进行排序
5构建哈曼树,亚此选择权值最小的入树
6计算权值大小
7从文件开始将字符编码每8各编入一个字节,剩下超过4位再编入下一个,
少于4位,则放入新字节
uncompress()函数
2009级《高级语言程序设计》大作业上机报告
题目:基于哈弗曼算法的压缩
参与人员:
【姓名】 【学号】
[问题定义] 压缩机解压的实现
[开发工具]DEV-C++
[数据结构]
struct head
{
unsigned char b; /*记录字符在数组中的位置*/
long count; /*字符出现频率(权值)*/
主要分为两个函数: 压缩函数void compress()
解压函数void uncompress()
主要流程如下
[算法描述]
main函数
compress()函数
压缩算法
1打开文件
2逐个读取文件的ASCII码,储存在c,统计频率
fread(&c,1,1,ifp);
header[c].count++;
3每个哈夫曼码值及其对应的ASCII码存放在一维数组header[i]中
相关文档
最新文档