1、 1 09 计算机课程设计计算机课程设计 哈夫曼编码哈夫曼编码/译码器(树的应用)译码器(树的应用) 2 一题目 哈弗曼树编码/译码(树的应用) 二 目的 1. 巩固数据结构基础知识,了解并初步掌握设计、实现较大系统的完整过程,包 括系统分析、编码设计、系统集成、以及调试分析,从而提高分析问题、解决问题的 能力,提高编程技能,培养理论结合实践的能力。 2. 熟练掌握数据结构的线性表、树、图等结构的应用的设计实现以及操作方法, 为进一步的应用开发打好基础。 3. 培养查阅文献和撰写文档的能力。 三 要求 1. 课程设计题目可从指导老师提供的题目列表中选择或自行提出。从实际情况 出发选择工作量适当
2、、难度适中的题目。自选题目必须要得到指导老师的同意才能开 题,否则不予承认,要求课题能够体现学生综合运用所学知识的能力。 2. 课程设计可参考已有的成果,但必须在功能、数据结构及算法上体现自己的 独到之处。 3. 程序源代码和课程设计说明书必须按照相关要求和格式完成。 四题目设计分析:简述算法实现的过程。 1.定义哈弗曼树。 2.设计算法 CrtHuffmanTree 存放哈弗曼树的各个权值,建立哈弗曼树。 3.设计算法 CrtHuffmanCode 从叶子结点到根,逆向求每个叶子结点对应的哈夫曼 编码,即“密文” 。 4.设计算法 TrsHuffmanTree 求哈弗曼编码对应的“明文” 。
3、 5设计 main 函数,利用以上函数实现建立哈弗曼函数、求编码和译文的目的。 五设计源代码 #include #include #include typedef char* HuffmanCode;/*动态分配数组,存储哈夫曼编码*/ typedef struct unsigned int weight ; /* 用来存放各个结点的权值*/ unsigned int parent, LChild,RChild ; /*指向双亲、孩子结点的指针*/ HTNode, * HuffmanTree; /*动态分配数组,存储哈夫曼树*/ void select(HuffmanTree *ht,int
4、n, int *s1, int *s2) int i; int min; for(i=1; i=n; i+) 3 if(*ht)i.parent = 0) min = i; i = n+1; for(i=1; i=n; i+) if(*ht)i.parent = 0) if(*ht)i.weight (*ht)min.weight) min = i; *s1 = min; for(i=1; i=n; i+) if(*ht)i.parent = 0 i = n+1; for(i=1; i=n; i+) if(*ht)i.parent = 0 *s2 = min; void CrtHuffmanTree(HuffmanTree *ht , int *w, int n) /* w 存放已知的 n 个权值,构造哈夫曼树 ht */ int m,i; int s1,s2; m=2*n-1; *ht=(HuffmanTree)malloc(m+1)