欢迎来到天天文库
浏览记录
ID:16264366
大小:258.50 KB
页数:29页
时间:2018-08-08
《数据结构课程设计-赫夫曼编码系统》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、《数据结构》课程设计报告课程名称:赫夫曼编码系统姓名:学号:专业:班级:指导教师:二〇一二年十二月28/29目录Contents1.课程小组21.1.小组成员及分工22.设计目的和要求23.需求分析24.设计说明24.1.文件编码(加密)24.2.文件解码(解密)35.详细设计35.1.程序主体结构35.2.主要算法说明35.2.1.Huffman树35.2.2.Huffman编码55.2.3.字符权重计算65.2.4.字符解码96.实验结果106.1.实验结果说明106.2.程序运行截图117.设计体会128.参考文献139.附:程序代码1328/291.课程小组1.1.小组成员及分工…
2、2.设计目的和要求通过课程设计,让学生进一步熟悉与巩固数据结构中常用算法,加深体会利用数据结构的算法解决实际问题的能力,培养学生进行复杂程序设计的技能,提高学生的思维能力、并促进其综合应用能力、分析能力和团队合作能力的提高。3.需求分析随着网络信息科技的不断高速发展,网络上的问题也不断显露出来,特别是人们特别关注的安全隐私问题,所以文件的传输安全性要特别地亟待解决和提高。本次的课程设计以赫夫曼编码为题,设计出赫夫曼文件编码系统,旨在对文件中的内容进行分析、统计、处理,进而按照赫夫曼编码的理论,对文件进行简单加密。特别是,不同的文本文件有不同的字符处理形式,所以因此每一个文本都会有一个相应的
3、密钥,用于对文本的解码。4.设计说明本次编写的程序按着对文件的编码(加密)和解码(解密)的两大步骤展开。4.1.文件编码(加密)首先选择文件编码程序。进入程序后,会要求操作人员选择将要编码的文件,并将其导入到程序中,程序正确导入文件后将会对文件从开始至结束扫描一遍,对文件中的字符进行统计,在最后计算出每个字符出现的频率,并将频率换算成每个字符相应的权重。然后根据得到的字符权重,构造赫夫曼树并因此完成赫夫曼编码(至此,文件的导入分析过程已完成)。然后让操作人员选择对文件进行编码。此时,程序将会继续打开文件,继续扫描一遍,并在扫描的过程中将扫描到得字符根据刚才编好的赫夫曼编码进行对照,将对应的
4、赫夫曼编码写入另一个文件(即加密的文件),所以,如果用户代开加密的文件即看到里面全是二进制代码,并不能分析出里面究竟是什么内容。(至此,加密的文件应经生成)。28/29最后,因为每个文件中的内容不同,所以每个文件的赫夫曼编码也不同,而赫夫曼编码是根据字符的权重生成的,所以每个文件都对应一个字符权重系列(即密钥),如果失去这个密钥,即使对文件进行了加密,也不同解密文件的内容,即文件加密失效,所以在生成加密文件后,一定要导出文件的字符权重(即密钥),以待之后的解码使用。(至此,文件的加密工作应经全部完成)。1.1.文件解码(解密)文件的解码程序是一步完成的,即要求操作者首先将之前生成的字符权重
5、(即密钥)导入程序,程序根据获取到得字符权重,调用赫夫曼编码子程序,进行赫夫曼编码。然后程序会提示操作者将加密后的文件导入程序中,程序会根据在程序中获取到的二进制编码与赫夫曼编码进行对照识别,显示出对应的字符,因此,文件的解密工作完成。2.详细设计2.1.程序主体结构程序主体结构分为文件编码与文件解码两个子程序。文件编码后分别导出编码后文件与文件密钥。文件解码需导入编码文件与文件密钥,然后显示文本内容。2.2.主要算法说明2.2.1.Huffman树//HuffmanTreelist:list为赫夫曼树.typedefstruct{chardata;//存放字符数据intweight;//
6、存放字符权重intparent,lchild,rchild;//分别为根、左子树、右子树}HuffmanTree;//Staticinfo:info为存放字符权重的数组指针.typedefstruct{chardata;//存放字符数据intweight;//存放字符权重}Static;//intcodeSize:codeSize为字符种类个数.28/29voidCreatHuffmanTree(HuffmanTree*&list,Static*info,intcodeSize){inti,j,limit;intlnode,rnode;intvalue1,value2;HuffmanTre
7、e*ptr;limit=codeSize*2-1;//limit为赫夫曼树结点个数if((list=(HuffmanTree*)malloc(sizeof(HuffmanTree)*limit))==NULL){printf("内存不足,操作失败!");exit(0);}/*******************初始化赫夫曼树各结点信息**************************/for(i=0,ptr=lis
此文档下载收益归作者所有