1、数据结构数据结构课程设计课程设计 1 文件加密文件加密- -赫夫曼算法赫夫曼算法 一一 目的目的 通过课程设计,巩固和加深对线性表、栈、队列、字符串、树、图、查找、排序等理 论知识的理解;掌握现实复杂问题的分析建模和解决方法(包括问题描述、系统分析、设 计建模、代码实现、结果分析等);提高利用计算机分析解决综合性实际问题的基本能 力。 二二 需求分析需求分析 1 1、文件加密核心算法(赫夫曼编码)设计文件加密核心算法(赫夫曼编码)设计 文件加密的核心算法是赫夫曼编码,赫夫曼编码的完成首先建立在赫夫曼树的创建, 在此之前要完成编码字符的权值计算,依照题意: 1、将 26 个字符的权值存入 wei
2、ght 结构体中。 2、将各个结点 HTNode 补充数值,创建赫夫曼树 HuffmanTree。 3、赫夫曼树创建完毕,即可进行字符串的编码和解码工作。核心算法即完成。 2 2、功能要求和说明功能要求和说明 使用菜单操作,提示用户相应的操作,用户指定文件对其进行加密或解密,在屏幕上 可以看到文件内容。 用户指定文件,默认在 D:,为了便于测试编码和解码的正确性。可以由用户输入字符 串进行编码和解码。 三三 概要设计概要设计 1 1、可满足输入输出的形式及限制可满足输入输出的形式及限制 本程序只支持 26 字符编码解码,程序运行中间会产生一个 outfile.txt 文件,用于存储 加密或解密
3、内容。支持用户在屏幕查看文件内容。 程序在用户输入数据前,会输出相应的提示,在用户输入超出范围或者输入错误时, 会提示重新输入或者提示错误并退出。 2 2、所用数据类型的定义及含义所用数据类型的定义及含义 此程序运用了整形、实型、字符型、指针、数组、结构体。下面是全局(举例): typedef struct int weight; int parent,lchild,rchild; 数据结构数据结构课程设计课程设计 2 HTNode; /构造赫夫曼树结点的结构体 typedef struct HTNode *HTN; /存储编码的各个字符 int length; /需编码字符个数 int si
4、ze; /赫夫曼编码总容量 HuffmanTree; /构造赫夫曼树的结构体 typedef struct char *ch; /存放需要编码的原始字码 int *in; /存放各个字码的权值 Weight; char Code2726; /存放各个字符的赫夫曼编码 01 int Code_N30; /存放各个字符对应编码 01 的个数,用于输出控制 3 3、各模块的划分各模块的划分 简化图: 4 4、各模块的功能描述各模块的功能描述 1、赫夫曼编码部分:题意规定字符频率或用户输入字符串,计算出字符权值,创建赫 夫曼树,进行赫夫曼编码,将其存入全局变量,用于字符串编码解码,文件加密及解密。 2
5、、文件加密部分:由用户输入加密的文件名称(filename.txt),加密过程中将加密后 内容暂时存入 outfile.txt 中,此时已经将 filename.txt 中内容加密,但内容在 outfile.txt 中, 重新将 outfile.txt 内容存入到 filename.txt 中,则文件加密过程完成。 3、文件解密部分:文件解密过程同加密过程,只是内容处理只是由加密变为解密过 程。其余过程不改变,解密过程也用到了 outfile.txt 文件。 4、文件查看部分:用户输入文件名称,文件内容输出到屏幕,用于查看文件加密或解 密的结果。 5 5、各函数的定义及描述各函数的定义及描述
6、void showMenu(); /输出菜单列表 文件加密程序 计算字符权值 创建赫夫曼树 赫夫曼编码 指定文件加密 指定文件解密 查看文件内容 数据结构数据结构课程设计课程设计 3 操作结果:在屏幕上打印出菜单 void Init_HuffmanTree(HuffmanTree /对赫夫曼树结构初始化 H是初始化的赫夫曼树的结构体,S 是字符及权值的结构体 操作结果:对 H和 S 进行了初始化 void Init_Weight(Weight /对编码个数和权值的结构初始化 S 是传入函数的字符及权值的结构体 msize 和 msize1 是初始化 S.ch 和 S.in 的整形数据 操作结果:将 Weight 结果体初始化 void WeightNumber(Weight /求出输入