- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
计算机与信息工程系 《数据结构》课程设计报告
PAGE
学号
201
2014-2015学年 第一学期
《数据结构》
课程设计报告
题目:
哈夫曼编码加密文件
专业:
班级:
姓名:
学号:
指导教师:
成绩:
计算机与信息工程系
2014年 10月 30 日
PAGE \* MERGEFORMAT
PAGE \* MERGEFORMAT 1
目 录
1问题描述1
2需求分析1
2.1 数据结构1
2.2 主要函数1
3概要设计1
3.1可满足输入输出的形式及限制2
3.2所用数据类型的定义及含义2
3.3各函数之间的调用关系2
3.4各个模块之间的主要关系 2
4详细设计2
4.1流程图3
4.2源代码4
5测试情况10
6测试结果11
7总结与提高15
参考文献16
PAGE \* MERGEFORMAT
PAGE \* MERGEFORMAT 3
1 问题描述
用哈夫曼编码,将输入的文字,或者文件中的文字进行编码,并输出加密后的文字。
2需求分析
2.1 数据结构
此函数中运用到的数据结构知识就是哈夫曼树的建立以及遍历,建立主要就是每一次选择权值最小的两个数并将其求和,然后用他们的和代替这两个数,再进行求两个最小值,最后构成一个哈夫曼数;遍历是采用从叶子结点开始向根节点确定唯一的路径。掌握现实复杂问题的分析建模和解决方法(包括问题描述、系统分析、设计建模、代码实现、结果分析等);提高利用计算机分析解决综合性实际问题的基本能力。
2.2 主要函数
(1)void CrtHuffmantree(HuffmanTree ht,int w[],int n),功能是建立一个哈夫曼树;
(2)void CrtHuffmanCode(HuffmanTree ht,HuffmanCode hc,int n),功能是计算哈夫曼编码;
(3)void dianwen(int count[],char alldata[]),功能是统计输入电文的字母种类以及频率;
(4)int fcount(char alldata[],char data[],int count[]),功能是统计打开文件中出现的字母的种类以及频率;
(5)void showtime(),功能是查看系统当前的时间;
(6)int search(char ch,char data[],int n),查询电文中的每一个字母所对应得哈夫曼编码的下标;
(7)void Printf(HuffmanCode hc,int n,char data[],char alldata[],int count[]),功能是输出每一个字母所对应的哈夫曼编码;
(8)void showall(HuffmanCode hc,char alldata[],int count[],char data[],int n),功能是输出经过加密后的密文。
(9)void showMenu(); 功能是输出菜单列表
3概要设计
3.1可满足输入输出的形式及限制
本程序支持字符编码解码,程序运行中有一个文件,用于存储加密字符。支持用户在屏幕查看文件内容。
程序在用户输入数据前,会输出相应的提示,在用户输入超出范围或者输入错误时,会提示重新输入或者提示错误并退出。使用菜单操作,提示用户相应的操作,用户指定文件对其进行加密或解密,在屏幕上可以看到文件内容。
3.2所用数据类型的定义及含义
此程序运用了整形、实型、字符型、指针、数组、结构体。下面是全局(举例): typedef struct{
int weight;
int parent,Lchild,Rchild;
}HTNode,HuffmanTree[M+1];//构造赫夫曼树结点的结构体
#define N 27//定义最大叶子结点个数
#define M 2*N-1
typedef char* HuffmanCode[N+1]; //存储哈夫曼编码串的头指针
int count[27];//用于存储所有字母出现的频率,count[0]用于存储字母的总个数 char data[N];//用于存储所出现过的字母
3.3各函数之间的调用关系
主函数中是菜单打印(show())和showtime(),各模块套用和调用关系如下: 主函数中调用chiocel(),openfile(),input(),子函数中调用CrW(data,w,count)【fcount(alldata,data,count)】,CrtHuffmantree(ht,w,n),CrtHuffmanCode(ht,hc,n),Printf(hc,n,data,alldata,count),showall(hc,alldata,count,da
原创力文档


文档评论(0)