- 1、本文档共17页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
huffman编码译码实现文件的压缩与解压.doc
数据结构
课程设计
题目名称:huffman编码与解码实现文件的压缩与解压
专业年级:
组 长:
小组成员:
指导教师:
二〇一二 年 十二 月 二十六 日
目录
目标任务与问题分析…………………………2
1.1目标任务…………………………………………2
1.2问题分析…………………………………………2
算法分析………………………………………2
2.1构造huffman树…………………………………2
2.1.1 字符的统计……………………………………………… 2
2.1.2 huffman树节点的设计……………………………………2
2.2构造huffman编码 ………………………………3
2.2.1 huffman编码的设计……………………………………… 3
2.3 压缩文件与解压文件的实现……………………3
三、执行效果…………………………………… 4
3.1界面……………………………………………………… 4
3.2每个字符的编码………………………………………… 4
3.3操作部分………………………………………………… 5
3.4文件效果………………………………………………… 6
源程序……………………………………………… 7
参考文献……………………………………………16
huffman编码与解码实现文件的压缩与解压
一、目标任务与问题分析
1.1目标任务
采用huffman编码思想实现文件的压缩和解压功能,可以将任意文件压缩,压缩后也可以解压出来。这样即节约了存储空间,也不会破坏文件的完整性。
1.2问题分析
本问题首先应该是利用哈夫曼思想,对需要压缩的文件中的个字符进行频率统计,为了能对任意的文件进行处理,应该所有的文件以二进制的方式进行处理,即对文件(不管包含的是字母还是汉字)采取一个个的字节处理,然后根据统计的频率结果构造哈夫曼树,然后对每个字符进行哈夫曼编码,然后逐一对被压缩的文件的每个字符构建的新的哈夫曼编码存入新的文件中即得到的压缩文件。解压过程则利用相应的哈夫曼树及压缩文件中的二进制码将编码序列译码,对文件进行解压,得到解压文件。
二、算法分析
2.1构造huffman树
要利用哈夫曼编码对文本文件进行压缩,首先必须知道期字符相应的哈夫曼编码。为了得到文件中字符的频率,一般的做法是扫描整个文本进行统计,编写程序统计文件中各个字符出现的频率。由于一个字符的范围在[0-255]之间,即共256个状态,所以可以直接用256个哈夫曼树节点即数组(后面有节点的定义)空间来存储整个文件的信息,节点中包括对应字符信息,其中包括频率。
2.1.1 字符的统计
用结构体huffchar来存放文件字符的信息。其中有文件中不同字符出现的种类Count、字符data。
struct huffchar{
//存放读入字符的类;
int Count;//字符出现的个数;
char data;//字符;
};
函数实现:
bool char_judge(char c)//判断字符出现的函数;
void char_add(char c)//添加新出现的字符;
void read_file_count() //文件的读取
2.1.2 huffman树节点的设计
用结构体huff_tree来存储结点信息,其中有成员频率weight、父亲节点parent、左儿子节点lchild、右儿子节点rchild。
struct huff_tree{/
/huffman树结点定义;
int parent;
int lchild;
int rchild;
int weight;
};
函数实现:
void creathuffman() //构造huffman树的函数
2.2构造huffman编码
2.2.1 huffman编码的设计
用结构体huffcode来存储每个字符的编码。其中有编码数组bits、起始编码start、频数count、编码对应的字符 c。
struct huffcode{
//结构体
string bits[100];//存放解码;
int start;//
int count;//频数
string c;//存放字符;
};
函数实现:
void huffmancode()//编码函数
2.3 压缩
文档评论(0)