1、数据结构课程设计 1 程序设计程序设计(大作业大作业)报告报告 课程名称:数据结构课程设计 设计题目:哈夫曼编码器 院 系:信息技术学院 班 级:计算机科学与技术 2 班 设 计 者: 学 号: 指导教师: 设计时间:2012.1.9-2012.1.11 数据结构课程设计 2 课程设计(大作业)任务书课程设计(大作业)任务书 课程设计题目:哈夫曼编码器 课程设计要求: (1)初始化:键盘输入 n 个字符和 n 个权值,建立哈夫曼树 (2)编码:利用建好的 huffman 树生成 huffman 编码 (3)输出编码 (4)字符和频度如下: 字符:空格 A B C D E F G H I J K
2、 L M N O P Q 频度:186 64 13 22 32 103 21 15 47 57 1 2 32 20 57 63 15 1 字符:R S T U V W X Y Z 频度:48 51 80 23 8 18 1 16 工作计划及安排 (1)在上机之前选题 (2)选择合适的数据结构 (3)结点结构的设计 (4)算法设计与分析 (5)程序设计、实现、调试 (6)提交课程设计报告 指导教师签字 年 月 日 数据结构课程设计 3 课程设计(大作业)课程设计(大作业)成绩成绩 学号: 姓名: 指导教师: 老师 课程设计题目: 哈夫曼编码器 总结: 通过此次的课程设计使我认识了哈夫曼树的建立与
3、应用, 复习了数据结构中 的树的存储结构,怎样构造哈夫曼树以及用哈夫曼树进行编码。学习数据结构能 使我们为其它课程打好基础, 而课程设计作为数据结构中一个重要环节能更好的 使我们加深对它的了解。 指导教师评语: 成绩: 填表时间: 指导教师签名: 数据结构课程设计 4 目录目录 程序设计(大作业)报告 . 1 昆明学院课程设计(大作业)任务书. 2 1.问题描述 5 2.基本要求 5 3.数据结构 5 4.总体设计 5 5.详细设计 6 5.1 程序流程图 . 6 5.2 初始化哈夫曼树 7 5.3 输入权值函数 . 7 5.4 选择根结点,存放权值最小和次小序号 . 7 5.5 构造哈夫曼树
4、 . 7 5.6 根据哈夫曼树求哈夫曼编码 7 6.测试与调试. 7 6.1 程序步骤演示 . 7 6.1.1 输入各字符的权值 7 6.1.2 输入字符 8 6.1.3 得到哈夫曼编码 . 8 6.2 程序测试结果 . 8 7.源程序清单. 10 8.实验心得 13 数据结构课程设计 5 1.1.问题描述问题描述 构造一棵哈夫曼树, 根据所需输入的字符数目, 分别输入字符的频度和字符, 得到它们相应的编码,也就是设计一个哈夫曼编码器。 2.2.基本要求基本要求 以字符的频度为权值,建立哈夫曼树,求哈夫曼编码。根据字符及权值得到 其相应的编码。 3.3.数据结构数据结构 typedef str
5、uct int weight; /*结点的权值*/ int lchild,rchild,parent; /*左、右孩子及双亲的下标*/ htnode; typedef htnode huffmantreem+1; /* huffmantree 是结构数组类型,其0号单 元不用,存储哈夫曼树 */ typedef struct char ch; /*存储字符*/ char coden+1; /*存放编码位串*/ codenode; typedef codenode huffmancoden+1; /*huffmancode 是结构数组类型,其 0 号 单元不用,存储哈夫曼编码*/ 4.4.总体设
6、计总体设计 功能模块划分 void main() /主函数 void inithuffmantree(huffmantree ht) /初始化哈夫曼树函数 inithuffmantree() void inputweight(huffmantree ht) /输入权值函数 数据结构课程设计 6 void selectmin(huffmantree ht, int i, int *p1, int *p2) void createhuffmantree(huffmantree ht) /构造 huffman 树,htm为其根结 void huffmancodes(huffmantree ht,huffmancode hcd) /*根据 huffman 树 ht 求 huffman 编 5.5.详细设计详细设计 5.15.1 程序