1、 数据结构课程设计报告 题题 目:目: 哈夫曼编哈夫曼编/译码器译码器 院系名称:院系名称: 计算机学院计算机学院 专业名称:专业名称: 软件工程软件工程 班班 级:级: 1101 班班 学生姓名:学生姓名: 学号(学号(8 位) :位) : 指导教师:指导教师: 设计起止时间:设计起止时间:2012 年 12 月 3 日2012 年 12 月 14 日 一一. . 设计目的设计目的 1.巩固和加深对数据结构的理解,提高综合运用本课程所学知识的能力; 2.深化对算法课程中基本概念、理论和方法的理解; 3.巩固构造哈夫曼树的算法; 4.设计试验用程序实验哈夫曼树的构造,编码和译码。 二二. .
2、设计内容设计内容 利用哈夫曼编码进行信息通信可以大大提高信道利用率, 缩短信息传输时间, 降低 传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将 传来的数据进行译码(复原) 。试为这样的信息收发站写一个哈夫曼的编/译码器。 三概要设计三概要设计 1 1功能模块图;功能模块图; 2 2各个模块详细的功能描述。各个模块详细的功能描述。 (1)主程序模块 打印菜单; 让用户选择是编码还是译码; 让用户决定是否观看一些信息。 (2)密码模块 void Login() 密码函数,用户输入用户名和密码,密码正确方能进入系统,否则重新输入。 (3)编码模块 void OpenSo
3、urceFile(char s) 打开源文件,并将其内容存到 s中 void Code(char s,char str,char code,int freq,HFMTree *HT,CodeNode HC) 编码函数,调用编码所需的所有函数 主程序模块 密码模块 文件模块 编码模块 译码模块 void Search(char s,char str,int freq) 查找各个字符,将其存到 str中,并统计其出现的频数,即权值,存放在 freq中 void CreateHFMTree(HFMTree *HT,int freq) 创建哈夫曼树 void HFMCode(HFMTree HT,Co
4、deNode HC,char str) 按左 0 右 1 的顺序进行编码 AllCode(s,HC,code) 将所有字符的编码连起来,存放到 code中 Save(code) 将编码结果保存到文件 code.txt 中 (4)译码模块 void DeCode(char code,char str,char ss,HFMTree *HT,CodeNode HC) 译码函数,调用译码所需的所有函数 void OpenCodeFile(char code) 打开编码文件 Decoding(code,*HT,str,ss) 从根结点开始按编码顺序进行译码 Save(ss) 将译码结果保存到文件 de
5、code.txt 中 四详细设计四详细设计 1 1功能函数的调用关系图功能函数的调用关系图 主函数 密 码 菜 单 打开源文件 编码 译码 显示哈夫 曼信息 查找字符 创建哈夫曼树 编码 连接编码 保存编码 查 找 权 值 打开文件 译码 保存译码 2.2.各功能函数的数据流程图各功能函数的数据流程图 (1)创建哈夫曼树函数 是 否 否 是 (2)编码函数 是 开始 int i=0; HFMTree p,HT1,HT2; p=*HT=(HFMTree)malloc(sizeof(HFMNode); p-next=p-LChild=p-RChild=p-Parent=NULL; inext=(H
6、FMTree)malloc(sizeof(HFMNode); p=p-next; p-next=p-LChild=p-RChild=p-Parent=NULL; i+; iweight=freqi; p=p-next; i+; iParent=HT2-Parent=p; p-LChild=HT1; p-RChild=HT2; p-weight=HT1-weight+HT2-weight; p=p-next; i+; 开始 int i=0; HFMTree q,p=HT; iParent-Lchild HCi.code-HCi.flag=0; q=q-Parent; HCi.code-HCi.flag=1; p=p-next putchar(n); passwordi = 0; if(!(strcmp(password,“04113027“)