- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《数据结构》课程设计报告
课程名称 :赫夫曼编码系统
姓 名 :
学 号 :
专 业 :
班 级 :
指导教师 :
二〇一二年 十二月
目录 Contents
1. 课程小组 2
1.1. 小组成员及分工 2
2. 设计目的和要求 2
3. 需求分析 2
4. 设计说明 2
4.1. 文件编码(加密) 2
4.2. 文件解码(解密) 3
5. 详细设计 3
5.1. 程序主体结构 3
5.2. 主要算法说明 3
5.2.1. Huffman树 3
5.2.2. Huffman编码 5
5.2.3. 字符权重计算 6
5.2.4. 字符解码 9
6. 实验结果 10
6.1. 实验结果说明 10
6.2. 程序运行截图 11
7. 设计体会 12
8. 参考文献 13
9. 附:程序代码 13
课程小组
小组成员及分工
…
设计目的和要求
通过课程设计,让学生进一步熟悉与巩固数据结构中常用算法,加深体会利用数据结构的算法解决实际问题的能力,培养学生进行复杂程序设计的技能,提高学生的思维能力、并促进其综合应用能力、分析能力和团队合作能力的提高。
随着网络信息科技的不断高速发展,网络上的问题也不断显露出来,特别是人们特别关注的安全隐私问题,所以文件的传输安全性要特别地亟待解决和提高。
本次的课程设计以赫夫曼编码为题,设计出赫夫曼文件编码系统,旨在对文件中的内容进行分析、统计、处理,进而按照赫夫曼编码的理论,对文件进行简单加密。特别是,不同的文本文件有不同的字符处理形式,所以因此每一个文本都会有一个相应的密钥,用于对文本的解码。
设计说明
本次编写的程序按着对文件的编码(加密)和解码(解密)的两大步骤展开。
文件编码(加密)
首先选择文件编码程序。进入程序后,会要求操作人员选择将要编码的文件,并将其导入到程序中,程序正确导入文件后将会对文件从开始至结束扫描一遍,对文件中的字符进行统计,在最后计算出每个字符出现的频率,并将频率换算成每个字符相应的权重。然后根据得到的字符权重,构造赫夫曼树并因此完成赫夫曼编码(至此,文件的导入分析过程已完成)。
然后让操作人员选择对文件进行编码。此时,程序将会继续打开文件,继续扫描一遍,并在扫描的过程中将扫描到得字符根据刚才编好的赫夫曼编码进行对照,将对应的赫夫曼编码写入另一个文件(即加密的文件),所以,如果用户代开加密的文件即看到里面全是二进制代码,并不能分析出里面究竟是什么内容。(至此,加密的文件应经生成)。
最后,因为每个文件中的内容不同,所以每个文件的赫夫曼编码也不同,而赫夫曼编码是根据字符的权重生成的,所以每个文件都对应一个字符权重系列(即密钥),如果失去这个密钥,即使对文件进行了加密,也不同解密文件的内容,即文件加密失效,所以在生成加密文件后,一定要导出文件的字符权重(即密钥),以待之后的解码使用。(至此,文件的加密工作应经全部完成)。
文件解码(解密)
文件的解码程序是一步完成的,即要求操作者首先将之前生成的字符权重(即密钥)导入程序,程序根据获取到得字符权重,调用赫夫曼编码子程序,进行赫夫曼编码。然后程序会提示操作者将加密后的文件导入程序中,程序会根据在程序中获取到的二进制编码与赫夫曼编码进行对照识别,显示出对应的字符,因此,文件的解密工作完成。
详细设计
程序主体结构
程序主体结构分为文件编码与文件解码两个子程序。
文件编码后分别导出编码后文件与文件密钥。
文件解码需导入编码文件与文件密钥,然后显示文本内容。
主要算法说明
Huffman树
//HuffmanTree list: list为赫夫曼树.
typedef struct
{
char data; //存放字符数据
int weight; //存放字符权重
int parent, lchild, rchild; //分别为根、左子树、右子树
}HuffmanTree;
//Static info: info为存放字符权重的数组指针.
typedef struct
{
char data; //存放字符数据
int weight; //存放字符权重
}Static;
//int codeSize: codeSize为字符种类个数.
void CreatHuffmanTree(HuffmanTree *list, Static *info, int codeSize)
{
int i, j, limit;
int lnode, rnode;
int value1, v
文档评论(0)