1 / 6
文档名称:

数据结构实验报告 实验五.docx

格式:docx   大小:17KB   页数:6页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

数据结构实验报告 实验五.docx

上传人:qi1920809 2019/2/13 文件大小:17 KB

下载得到文件列表

数据结构实验报告 实验五.docx

文档介绍

文档介绍:: 实现哈夫曼编码的生成算法。: 1、使学生熟练掌握哈夫曼树的生成算法。 2、熟练掌握哈夫曼编码的方法。: 已知n个字符在原文中出现的频率,求它们的哈夫曼编码。 1、读入n个字符,以及字符的权值,试建立一棵Huffman树。 2、根据生成的Huffman树,求每个字符的Huffman编码。并对给定的待编码字符序列进行编码,并输出。(1)郝夫曼树的存储表示 typedefstruct{ unsignedintweight; unsignedintparent,lchild,rchild; }HTNode,*HuffmanTree;//动态分配数组存储郝夫曼树郝夫曼编码的存储表示 typedefchar**HuffmanCode;//动态分配数组存储郝夫曼编码(2)主要的实现思路: ,这里使用了数组 ()遍历n个字符,找出权值最小的两个 ,并求出n个字符的郝夫曼编码HC 总结 ,在调用select()这个函数时,想把权值最小的两个结点的序号带回HuffmanCoding(),所以把那2个序号设置成了引用。 ,在什么时候分配内存,什么时候初始化花的时间比较长 ,发现结果仍然存在问题,经过分步调试,发现了特别低级的输入错误。=+;中的s2写成了i 附: //动态分配数组存储郝夫曼树 typedefstruct{ intweight;//字符的权值 intparent,lchild,rchild; }HTNode,*HuffmanTree; //动态分配数组存储郝夫曼编码 typedefchar**HuffmanCode; //选择n个(这里是k=n)节点中权值最小的两个结点 voidSelect(HuffmanTree&HT,intk,int&s1,int&s2) {inti; i=1; while(i //下面选出权值最小的结点,用s1指向其序号 s1=i; for(i=1;i { if(==0&& } //下面选出权值次小的结点,用s2指向其序号 for(i=1;i { if(==0&&i!=s1)break; } s2=i; for(i=1;i { if(==0&&i!=s1&& } } //构造Huffman树,求出n个字符的编码 voidHuffmanCoding(HuffmanTree&HT,HuffmanCode&HC,int*w,intn) { intm,c,f,s1,s2,i,start; char*cd; if(n m=2*n-1;//n个叶子n-1个结点 HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode));//0号单元未用,预分配m+1个单元 HuffmanTreep=HT+1; w++;//w的号单元也没有值,所以从号单元开始 for(i=1;i { p->weight=*w; p->parent=p->rchild=p->lchild=0; } for