1、 课程设计报告课程设计报告 课程名称: 数据结构课程设计 课程设计题目: 哈夫曼编码 系: 数学与计算科学系 专 业: 信息与计算科学 年级、班: 姓 名: 学 号: 指导教师: 职 称: 2012 年 12 月 1 目录目录 1、问题描述 -2 2、基本要求 -2 3、测试结果 -2 4、算法思想 -2 5、模块划分 -2 6、数据结构 -2 7、源程序 -3 8、测试情况 -14 9、设计总结 -15 10、参考资料 -15 2 1 问题描述 利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本,试 设计一个哈夫曼编码系统。对所给的报文可以进行编码,并进行译码。 2
2、 基本要求 从键盘输入一段报文(如“what did you do that made you so happy“)或从文档中读取,输出这 段报文的哈夫曼编码。 3 测试数据 what did you do that made you so happy 4 算法分析 1 : 从文件中读取 data.txt 中的数据并赋值给 ch 数组 (保存文件中的所有内容) 后面的程序只对数组进行操作。 2 :对数组 ch进行操作,统计出报文中出现的字符种类存放在 mi.ch 中, 并比较统计出每个字符出现的频数作为权值存放在 mi.weight 中。 3 :利用权值创建哈夫曼树。 4 :先序遍历输出哈夫曼
3、树,利用哈夫曼树输出哈夫曼编码,Code di中存储 关于字符哈夫曼编码的数据。di.ch 存放字符,di.code 存放字符的哈夫曼 编码。 5 :对数组 ch跟 d进行比较输出整篇报文的哈夫曼编码,并以输出的形式写 入到文件 date1 中。 6 :调用文件 date1 根据哈夫曼编码译出文件的内容,把文件的内容赋值给字符 串,对字符串进行操作。把 str 和 di.code 进行比较输出 di.ch. 5 模块划分 1 :HuffmanTree CreateHuffman(Element *m,int size1);/创建哈夫曼树 2 :HuffmanTree UnitHuffmanTr
4、ee(HuffmanTree / 合并两棵哈夫曼树 3 :int tongji(Element *m,char *ch);/统计权值 4 :void GetCode(HuffmanTree T,Code *m,int /获取各字 符的编码 5 :void bianma(char ch,Code *m,int size1);/对报文进行哈夫曼编码 6 :void yima(Code *m,int size1);/对哈夫曼编码译出报文内容 6 数据结构 struct Code /编码类型 char ch; /字符 string code; /编码 ; typedef BiTree HuffmanTree; /定义哈夫曼树类型 struct BiTNode 3 TElemType data; BiTNode *lchild,*rchild; ; typedef BiTNode *BiTree;/定义哈夫曼树的结构类型 struct Element char ch; double weight; ; typedef Element TElemT