数据结构课程设计_哈夫曼压缩文件

数据结构课程设计_哈夫曼压缩文件

ID:15669513

大小:67.50 KB

页数:17页

时间:2018-08-04

数据结构课程设计_哈夫曼压缩文件_第1页
数据结构课程设计_哈夫曼压缩文件_第2页
数据结构课程设计_哈夫曼压缩文件_第3页
数据结构课程设计_哈夫曼压缩文件_第4页
数据结构课程设计_哈夫曼压缩文件_第5页
资源描述:

《数据结构课程设计_哈夫曼压缩文件》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、《数据结构》基于哈夫曼算法的文件压缩程一.总体设计1.目标设计:*实现目标:利用哈夫曼算法编写一个可以对文件进行压缩和解压缩的程序,即可以将指定的文件用哈夫曼算法压缩为一个新的文件,也可以将一个压缩后的文件还原,并可以将压缩或还原后的文件保存到指定位置。*功能描述:任何文件都可以看作是由字节组成的字节块,将字节看作基本编码单元,一个文件就可以看作是由字节组成的信息串。对文件中各字节的出现频率进行统计,并以出现频率作为字节的权值,就可以用字节为叶结点构造哈夫曼树,进而构造出各字节的对应哈夫曼编码。字节编码是一种8位定长编码,将各字节用哈夫曼编码进行重新编码,就有可能使得总的编码长度更短,从

2、而达到压缩的效果。哈夫曼编码是无损压缩当中最好的方法。它使用预先二进制描述来替换每个符号,长度由特殊符号出现的频率决定。常见的符号需要很少的位来表示,而不常见的符号需要很多位来表示。哈夫曼算法对文件的压缩和解压缩的程序就是将存储源文件的二进制编码通过利用哈夫曼算法译为长度不等的哈夫曼编码,即得到哈夫曼树。这棵树有两个目的:1.编码器使用这棵树来找到每个符号最优的表示方法,进而存储树实现文件的压缩。2.解码器使用这棵树唯一的标识在压缩流中每个编码的开始和结束,其通过在读压缩数据位的时候自顶向底的遍历树,选择基于数据流中的每个独立位的分支,一旦一个到达叶子节点,解码器知道一个完整的编码已经读

3、出来了,即通过对哈夫曼树的遍历实现解压过程。2.框架设计:定义结构体类型变量structhead{}定义函数voidcompress()/*压缩文件*/{在函数compress内定义变量;读取被压缩文件;建立并打开目标文件;逐字节读入,并进行累加计数,得到各个字节在文件中的出现频率;利用哈夫曼算法构造出字节对应的哈夫曼树;将压缩后的数据写入目标文件,并保存;}定义函数uncompress()/*解压文件*/{在函数uncompress内定义变量;读取需解压文件;建立并打开目标文件;对哈夫曼树进行遍历实现解压;将解压后的数据写入目标文件,并保存;}定义主函数intmain(){输入A,压缩

4、文件,调用函数compress;输入B,解压文件,调用函数uncompress;}二.详细设计1、文件的字节频率统计字节共有256个,从0~255,可定义长度为256的频率数组来记录每个字节的出现频率。将文件以二进制方式打开,逐字节读入,并进行累加计数,就可以得到各个字节在文件中的出现频率。for(i=0;i<512;i++){if(header[i].count!=0)header[i].b=(unsignedchar)i;elseheader[i].b=0;header[i].parent=-1;header[i].lch=header[i].rch=-1;}for(i=0;i<25

5、6;i++){for(j=i+1;j<256;j++){if(header[i].countheader[j].count){pt1=j;min1=header[j].count;continue;}}head

6、er[i].count=header[pt1].count;header[pt1].parent=i;header[i].lch=pt1;min1=999999999;for(j=0;jheader[j].count){pt1=j;min1=header[j].count;continue;}}header[i].count+=header[pt1].count;header[i].rch=pt1;header[pt1].parent=i;}for(i=0;i

7、er[i].bits[0]=0;while(header[f].parent!=-1){j=f;f=header[f].parent;if(header[f].lch==j){j=strlen(header[i].bits);memmove(header[i].bits+1,header[i].bits,j+1);header[i].bits[0]='0';}else{j=strlen(header[i].bits);memmove

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。