计算机应用技术系课程设计报告书 数据结构与算法 课程设计报告书 题目: 哈夫曼编码/译码器 班级: 1 1 0 9 1 2 1 1 学号: ********** 姓名: * * 指导教师: * * 周期: 2 0 1 1 -1 2 -1 9 至 2 0 1 1 -1 2 -2 3 成绩: 年 月 日 计算机应用技术系课程设计报告书 一、课程设计的目的与要求 (一)课程设计目的与任务(参考已发文档自行编辑,但不少于 100 字) 设计一个利用哈夫曼算法的编码和译码系统,重复地显示并处理以下项目,直到选择退出为止。利用哈夫曼树编码问题基本原理的应用,撑握对树的不同存储结构的定义和算法描述。学会构造哈夫曼树和哈夫曼编码等主要算法。 (二)题目要求 1) 将权值数据存放在数据文件(文件名为 data.tx t,位于执行程序的当前目录中) 2) 分别采用动态和静态存储结构 3) 初始化:键盘输入字符集大小n、n 个字符和 n 个权值,建立哈夫曼树; 4) 编码:利用建好的哈夫曼树生成哈夫曼编码; 5) 输出编码; 6) 设字符集及频度如下表: 字符 空格 A B C D E F G H I J K L M 频度 186 64 13 22 32 103 21 15 47 57 1 5 32 20 字符 N O P Q R S T U V W X Y Z 频度 57 63 15 1 48 51 80 23 8 18 1 16 1 二、设计正文 1 系统分析 (1)定义一个变量名为 HTNode 的结构体,用该结构体中的 char data、int weight、int parent、int lchild、int rchild 分别表示哈夫曼树中每个结点的权值、权重、双亲结点、左孩子、右孩子,再定义一个 HTNode 类型的数组ht[30]存放哈夫曼树;另 外 定义一个变量名为 HCode 的结构体,采用HCode 类型变量的cd[start]~cd[n]存放当前结点的哈夫曼编码、最 后 定义一个 HCode 类型的数组hcd[30]的数组用于存放当前叶 子结点ht[i]的哈夫曼编码。 (2)编写 CodeInput(n,ht)函 数并在函 数中设置 一个 for(i=0;n;++)循 环 ,首先 输入 n 个字符,再利用函 数中的 for(i=0;