数据结构哈夫曼树.doc

数据结构哈夫曼树.doc

ID:60752300

大小:32.50 KB

页数:5页

时间:2020-12-13

数据结构哈夫曼树.doc_第1页
数据结构哈夫曼树.doc_第2页
数据结构哈夫曼树.doc_第3页
数据结构哈夫曼树.doc_第4页
数据结构哈夫曼树.doc_第5页
资源描述:

《数据结构哈夫曼树.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、__________________________________________________数据结构实验报告1.问题描述已知n个字符在原文中出现的频率,求它们的哈夫曼编码。2.问题分析求哈夫曼编码,首先要根据字符出现的频率,即权值,构建哈夫曼树,然后根据哈夫曼树求出哈夫曼编码。3.算法设计创建哈夫曼树:对n个权值,创建2n-1个节点,parent都默认为0,然后进行循环查找,每次循环都从所有节点中找出parent为0且weight最小的两个节点,序号分别为s1和s2,将s1节点和s2节点作为本节点的lchild和rchild,构建出一颗哈夫

2、曼树,循环2n-1次,最后只剩下一颗哈夫曼树,即所要求的哈夫曼树。哈夫曼编码:从叶子节点出发,寻找双亲节点,若没有则说明已经到根节点;若有双亲节点,如果本节点是双亲节点的左孩子,则编码为0,右孩子编码为1,依次寻找直到走到根节点。最后将所求编码倒序输出即为哈夫曼编码。4.测试数据测试数据为8个字符,权值分别为:5,29,7,8,14,23,3,11。测试结果:收集于网络,如有侵权请联系管理员删除__________________________________________________1.总结建立哈夫曼树的时候,是逆向构建,即先创建叶节点,

3、再创建根节点,从下往上创建。求哈夫曼编码的时候也是一样,从叶子节点不断找该节点的根节点,直到找到该哈夫曼树的根节点。2.附录#include#include#include#defineERROR0#defineOK1//-----------赫夫曼树和赫夫曼编码的存储表示----------typedefstruct{unsignedintweight;unsignedintparent,lchild,rchild;}HTNode,*HuffmanTree;typedefchar**

4、HuffmanCode;//-----------赫夫曼算法------------------------------voidSelect(HuffmanTreeHT,intn,int&min1,int&min2){unsignedintm1,m2;m1=m2=-1;//随意确定两个权值为最小for(inti=1;i<=n;i++){if(m2!=-1)break;if(HT[i].parent==0){if(m1==-1){m1=HT[i].weight;min1=i;}else{m2=HT[i].weight;min2=i;}收集于网络,如有

5、侵权请联系管理员删除__________________________________________________}}//找最小权值for(intk=1;k<=n;k++){if(HT[k].parent==0){intw=HT[k].weight;if(k==min1

6、

7、k==min2)continue;if(w

8、的权值(均>0),构造赫夫曼树HT,并求出n个字符的赫夫曼编码HCif(n<=1)return;intm=2*n-1;HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode));//0号单元未用inti;HuffmanTreep=HT;for(p++,i=1;i<=n;i++,p++,w++){p->weight=*w;p->parent=0;p->lchild=0;p->rchild=0;}for(;i<=m;i++,p++){p->weight=0;p->parent=0;p->lchild=0;p->rchild

9、=0;}ints1,s2;for(i=n+1;i<=m;i++){//建赫夫曼树//在HT[1..i-1]选择parent为0且weight最小的两个节点,其序号分别为s1和s2Select(HT,i-1,s1,s2);HT[s1].parent=i;HT[s2].parent=i;HT[i].lchild=s1;HT[i].rchild=s2;HT[i].weight=HT[s1].weight+HT[s2].weight;}//----从叶子到根逆向求每个字符的赫夫曼编码----收集于网络,如有侵权请联系管理员删除_______________

10、___________________________________HC=(HuffmanCode)malloc((n+

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。