资源下载地址:https://download.csdn.net/download/sheziqiong/85771842
资源下载地址:https://download.csdn.net/download/sheziqiong/85771842
一、设计目的
利用Huffman编码进行通信可以大大提高信道利用率.缩短信息传输时间,降低传输成本,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码(复原)。对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统。此程序就是为这样的信息收发站写一个Huffman码的编/译码系统。
二、设计内容
-
建立哈夫曼树:读入文件(*.souce),统计文件中字符出现的频度,并以这些字符频度作为权值,建立哈夫曼树。
-
编码:利用已建好的哈夫曼树,获得各个字符的哈弗曼编码,并对正文进行编码,然后输出编码结果,并存入文件(*.code)中。
-
译码:利用已建好的哈夫曼树将文件(.code)中的代码进行译码,并输出译码结果,并存入文件(.decode)中。
三、概要设计
3.1 功能模块图;
3.2 各个模块详细的功能描述。
-
void menu() 获取菜单
-
对源文件进行编码: 由客户端输入需要编码的文件名,然后遍历文件所有字符,获得所有字符数以及字符频度,将字符频度当作对应字符的权值,将所有字符数传入key返回。先建立哈夫曼森林,对每一种字符,分别建立一颗单节点Huffman树,对每一个Huffuman节点的成员进行初始化。然后依次选择根节点权值最小的树作为左右子树,权值之和为父节点的权值。此过程不断进行,每进行一次,森林里就少一颗树,当森林有且仅有一棵树时,这棵树就是Huffman树。在这个过程中,定义一个缓存数组,由后向前保存。最后一位为‘\0’,由叶子向根移动,左‘0’右‘1’,直至遍历完所有字符,得到所有字符的哈夫曼编码,存在每个节点的code成员里。由客户端输入想要保存的文件名,按原文本的字符顺序,将哈夫曼编码存入文件。
-
查看编码表:输出字符,权值及其最后的哈夫曼编码。
-
对编码文件进行译码: 由客户端获取需要译码的文件名,然后由哈夫曼树的根结点出发,根据文件内的0或1判断是进入左子树还是进入右子树,直至达到根节点,就算识别出了一个字符。直至文件结束。
四、详细设计
4.1 功能函数的调用关系图
4.2 各功能函数的数据流程图
五、测试数据及运行结果
- 初始化界面
5.1 正常测试数据和运行结果
要求提供3组正常测试数据和运行结果
1)
2)
3)
5.2 异常测试数据及运行结果
要求提供2组异常测试数据和运行结果
中文输入
非法输入
资源下载地址:https://download.csdn.net/download/sheziqiong/85771842
资源下载地址:https://download.csdn.net/download/sheziqiong/85771842