- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
哈弗曼编码译码器的实现
“数据结构”课程设计报告
(哈夫曼编码/译码器的实现)
学生姓名: _
指导教师: _______
所 在 系: 电 子 信 息 系 __
所学专业: 计算机科学与技术_
年 级:
目录
1、需求分析 1
1.1课程设计要求 1
1.2选题的意义及背景 1
1.3本组课程设计目标 1
2、概要分析 2
2.1输出哈夫曼树 2
2.2哈夫曼编码 2
2.3哈夫曼译码 3
3、详细设计 4
3.1哈夫曼建树 4
3.2哈夫曼编码 4
3.3哈夫曼译码 4
3.4主函数 5
4、调试分析 5
4.1输入要压缩的文件 5
4.2读文件并计算字符频率 6
4.3根据字符的频率,利用Huffman编码思想创建Huffman树 6
4.4由创建的Huffman树来决定字符对应的编码,进行文件的压缩 6
4.5解码压缩即根据Huffman树进行译码 6
5、用户手册 8
6、测试结果 9
7、总结 10
8、参考文献 11
9、小组人员分工 11
1、需求分析
1.1课程设计要求
基于哈夫曼编码的思想进行文件的压缩处理
(1) 能够将一个文件进行编码压缩
(2) 能够将压缩的文件解码还原
1.2选题的意义及背景
锻炼我们的编码能力,真正理解数据结构的编码思想,并且锻炼我们的动手能力和成员间的配合,提高程序编写能力。
在信息传递时,希望长度能尽可能短,即采用最短码。赫夫曼编码的应用,就是采用这种有效的数据压缩技术可以节省数据文件的存储空间和计算机网络的传送时间。
1.3本组课程设计目标
实现赫夫曼树的建立,赫夫曼编码的对对应的文件进压缩和对压缩文件的进行译码。
调试程序,最后完成程序设计,完成设计报告,总结经验。
2、概要分析
主要模块及调用关系
2.1输出哈夫曼树
求字符结点数
const unsigned int n=256; //字符数
const unsigned int m=256*2-1; //结点总数
用类编码哈夫曼树
class HuffmanTree{ //Huffman树
public:
void Code(); //编码
void UnCode(); //译码
private:
HTNode HT[m+1]; //树结点表(HT[1]到HT[m])
char Leaf[n+1]; }; //叶结点对应字符(leaf[1]到leaf[n])
2.2哈夫曼编码
char *HuffmanCode[n+1]; //叶结点对应编码(*HuffmanCode[1]到*HuffmanCode[n])
unsigned int count; //频度大于零的字符数
unsigned int char_index[n]; //字符对应在树结点表的下标(char_index[0]到char_index[n-1])
unsigned long size; //被压缩文件长度
FILE *infp,*outfp; //输入/出文件
Buffer buf; //字符缓冲
void Stat();
//统计字符出现频度并过滤掉频度为零的字符
//在HT[0]~HT[k]中选择parent为-1,树值最小的两个结点s1,s2
void Select(unsigned int k, unsigned int s1, unsigned int s2);
void Write(unsigned int bit); //向outfp中写入一个比特
void Write(unsigned int num,unsigned int k);
//向outfp中写入k个比特
void WriteToOutfp(); //强行写入outfp
int NToBits(unsigned int num);
//0~num之间的整数用二进位表示所需的最少位数
2.3哈夫曼译码
void Read(unsigned int bit); //从infp中读出一个比特
void Read(unsigned int num,unsigned int k);//从infp中读出k个
文档评论(0)