1、 课课 程程 设设 计计 报报 告告 题目: 哈夫曼编码 院 系: 计算机科学与应用系 专业年级: 计算机科学与技术 学 号: 学生姓名: 指导老师: 2013 年 06 月 25 日 第 1 页 共 21 页 目 录 1 1设计任务书设计任务书3 1.1 题目与要求3 1.2 涉及知识点3 1.3 输入输出分析3 1.4 测试数据分析3 2 2概要设计概要设计4 2.1 结构体类型定义及函数声明4 2.2 主程序流程5 3 3详细设计详细设计7 3.1 数据类型实现7 3.2 程序伪码 3.3 程序主要流程图 4 4调试分析调试分析 4.1 问题分析及回顾 4.2 算法时空分析 4.3 设想
2、改进 4.4 经验和体会 5 5用户使用说明用户使用说明 5.1 操作说明及详细步骤 6 6测试结果测试结果 6.1 测试数据及结果 7 7参考文献参考文献 8 8致谢致谢 第 2 页 共 21 页 1 1、 设计任务书设计任务书 1.11.1 题目与要求题目与要求 题目:题目:哈夫曼编码 要求: 1、I:初始化(Initialization) ,从终端读入字符集大小 n,以及 n 个字符和 n 个权值,建立哈夫 曼树,并将它存于文件 hfmTree 中。 2、E:编码(Encoding) ,利用已建好的哈夫曼树(如不在内存,则从文件 hfmTree 中读人) ,对文 件 ToBeTran 中
3、的正文进行编码,然后将结果存入文件 CodeFile 中。 3、D:译码(Decoding) ,利用已建好的哈夫曼树将文件 CodeFile 中的代码进行译码,结果存入文 件 TextFile 中。 4、P:输出代码文件(Print) ,将文件 CodeFile 以紧凑格式显示在终端上,每行 50 个代码。同时将 此字符形式的编码文件写入文件 CodePrin 中。 5、T:输出哈夫曼树(TreePrinting) ,将已在内存中的哈夫曼树以直观的方式(树或凹人表形式)显 示在终端上,同时将此字符形式的哈夫曼树写入文件 TreePrint 中。 1.21.2 设计知识点设计知识点 哈夫曼树的建
4、立,哈夫曼编码的生成,对编码信息的翻译,文件、结构体、指针、链表、数组、 循环语句、选择语句、输入输出控制等。 1.31.3 输入输出分析输入输出分析 对于用户输入数据进行存储,统计各字符出现的频率,然后通过 Huffman 编码得到 的各种字符的 Huffman 编码。此时程序需要输入一串 Huffman 代码串。输入完毕程序会 判断输入的代码串是否合法,若合法则输出译码结果。 1.41.4 测试数据分析测试数据分析 用下表给出的字符集和频度的实际统计数据建立哈夫曼树,并实现以下报文的编码和 译码:“aabbccdd”。 字符 a b c d e f g h ij k l m n o p q r s t u v w x y z 权值 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 第 3 页 共 21 页 2 2、 概要设计概要设计 2.12.1 结构体类型及函数声明结构体类型及函数声明 1. 哈夫曼树类型(树形结构) : void main(void) int i; void settree(void); /建立树 void cod