哈夫曼树上机实验报告.doc

哈夫曼树上机实验报告.doc

ID:59348176

大小:28.50 KB

页数:9页

时间:2020-10-31

哈夫曼树上机实验报告.doc_第1页
哈夫曼树上机实验报告.doc_第2页
哈夫曼树上机实验报告.doc_第3页
哈夫曼树上机实验报告.doc_第4页
哈夫曼树上机实验报告.doc_第5页
资源描述:

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

1、霍夫曼树实验目的:掌握结构体、指针及二叉树的生成、遍历等操作掌握霍夫曼编码/译码的原理。基本要求:熟练掌握树的操作。程序实现:程序第一遍统计原数据中各字符出现的频率,利用得到的频率值创建哈夫曼树,并把树的信息保存起来,以便解压时创建同样的哈夫曼树进行解压;第二遍,根据第一遍扫描得到的哈夫曼树进行编码,并把编码后的码字存储。要点分析:题目中涉及的主要知识点:1、本程序参考霍夫曼算法(由给定的权值构造赫夫曼树):(1)由给定的n个权值{w0,w1,w2,„,wn-1},构造具有n棵二叉树的集合F={T0,T1,T2,„,Tn-1},其中每

2、一棵二叉树Ti只有一个带有权值wi的根结点,其左、右子树均为空。(2)重复以下步骤,直到F中仅剩下一棵树为止:①在F中选取两棵根结点的权值最小的二叉树,做为左、右子树构造一棵新的二叉树。置新的二叉树的根结点的权值为其左、右子树上根结点的权值之和。②在F中删去这两棵二叉树。③把新的二叉树加入F。2、用构造赫夫曼树以完成赫夫曼编码:把d1,d2,„,dn作为叶子结点,把w1,w2,„,wn作为叶子结点的权,构造赫夫曼树。在赫夫曼树中结点的左分支赋0,右分支赋1,从根结点到叶子结点的路径上的数字拼接起来就是这个叶子结点字符的编码。3、译码的

3、过程是分解电文中的字符串,从根出发,按字符‘0’或‘1’确定找左孩子或右孩子,直至叶子节点,便求得该子串相应的字符。心得体会:通过本次实验,我熟练掌握了结构体、指针及二叉树的生成、遍历等操作,掌握了霍夫曼编码和译码的原理,熟练掌握树的操作,尤其是对霍夫曼树有了更深刻的理解。同时,在编写代码的过程中方,对字符串的相关知识进行了回顾。代码#include#include#includetypedefstruct{intweight;intparent,lchild,rchild;i

4、ntsign;}HTNode,*HuffmanTree;typedefchar**HuffmanCode;voidHuffmanCoding(HuffmanTree&HT,HuffmanCode&HC,int*w,intn,char*s);voidselect(HuffmanTree&HT,inti,int&s1,int&s2);voidcreatHuffmanTree(int*w,char*s,char*r);voidpr(HuffmanCode&HC,charr[],chars,chara[]);voidHuffmanYM(Huf

5、fmanCode&HC,charr[],chara[],intn,HuffmanTree&HT);voidHuffmanPass(HuffmanCode&HC,charr[],intn,HuffmanTree&HT);intmain(){chars[100];charr[100];chara[100]="a";intw[100];intn,p;HuffmanTreeHT;HuffmanCodeHC;printf("请输入进行编码的字符串");scanf("%s",s);p=strlen(s);if(p!=1)creatHuffma

6、nTree(w,s,r);printf("进行编码......");if(p!=1)HuffmanCoding(HT,HC,w,strlen(r)-1,r);elseprintf("%c的霍夫曼编码是:%c",s[0],'0');printf("霍夫曼码序列为:");if(p!=1)for(inti=0;i

7、)printf("%c",s[0]);elseHuffmanYM(HC,r,a,n,HT);printf("");printf("先序遍历输出叶子节点");if(p==1){printf("%c",s[0]);}elseHuffmanPass(HC,r,n,HT);return0;}voidHuffmanCoding(HuffmanTree&HT,HuffmanCode&HC,intw[],intn,chars[]){ints1,s2,f,c;intm,i,l;intstart;charcd[101];if(n<1)ret

8、urn;l=strlen(s);m=2*n-1;HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode));HT[0].weight=10000;for(i=1;i<=n;++i){HT[i

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

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

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