数据结构——实验四哈夫曼树与哈夫曼编码(共6页).doc

上传人:飞****2 文档编号:13868708 上传时间:2022-05-01 格式:DOC 页数:6 大小:114KB
返回 下载 相关 举报
数据结构——实验四哈夫曼树与哈夫曼编码(共6页).doc_第1页
第1页 / 共6页
数据结构——实验四哈夫曼树与哈夫曼编码(共6页).doc_第2页
第2页 / 共6页
点击查看更多>>
资源描述

《数据结构——实验四哈夫曼树与哈夫曼编码(共6页).doc》由会员分享,可在线阅读,更多相关《数据结构——实验四哈夫曼树与哈夫曼编码(共6页).doc(6页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、精选优质文档-倾情为你奉上软 件 学 院哈夫曼树与哈夫曼编码实验报告课程名称: 数据结构 姓 名: 郑斌 学 号: 7 班 级: 卓越131 专心-专注-专业实验四 哈夫曼树与哈夫曼编码一、实验目的1、使学生熟练掌握哈夫曼树的生成算法。2、熟练掌握哈夫曼编码的方法。二、实验内容本次实验提供3个题目,难度相当,学生可以根据自己的情况选做,其中题目一是必做题,其它选作!题目一、哈夫曼树和哈夫曼编码问题描述一电文,有若干个不同字符,要求从终端输入这些不同字符及其出现的频率,然后对这些字符进行哈夫曼编码,并输出。测试数据利用教材P.148 例62中的数据调试程序 (可自己设定测试数据)。 选作内容1、

2、打印出该哈夫曼树2、若从终端输入任意一段电文(假设仅为26个大小写英文字母),试编程高效地求出该段电文的哈夫曼编码。提示:如何快速统计不同字符的出现频率3、译码:将上述1的编码结果还原成电文。三、算法设计1) 本程序包含三个模块1 void Select(HuffmanTree HT,int i,int &s1,int &s2) /选择函数2 voidHuffmanCoding(HuffmanTree&HT,HuffmanCode&HC,int *w,int n)w存放n个权值, 构造哈夫曼树p, 3 Void Huffmancode(HuffmanTree &HT,HuffmanCode &

3、HC,int n)求出哈夫曼编码hc并输出哈弗曼编码四、 实验结果图1-1 输入哈弗曼树的权值图1-2 显示哈弗曼树表与其编码五、总结通过做哈弗曼树实验让对最优二叉树这种结构有了更深的了解和应用,对我以后的编程产生了比较深远的影响。六、源程序(带注释)#include#include#include#include#includeusing namespace std;typedef struct int weight; int parent,lchild,rchild;char charr;HTNode,*HuffmanTree;typedef char *HuffmanCode;void

4、Select(HuffmanTree HT,int i,int &s1,int &s2) int j,k=1; while(HTk.parent!=0)k+;s1=k;for(j=1;j=i;+j)if(HTj.parent=0&HTj.weightHTs1.weight)s1=j;k=1;while(HTk.parent!=0|k=s1)k+;s2=k;for(j=1;j=i;+j)if(HTj.parent=0&HTj.weightHTs2.weight&j!=s1)s2=j;void HuffmanCoding(HuffmanTree &HT,int *w,int n)int m,i,s

5、1,s2;if(n = 1) return;m = 2 * n - 1;HT = (HuffmanTree)malloc(m + 1) * sizeof(HTNode);for(i = 1;i = n;+i)HTi.weight = wi;HTi.lchild = 0;HTi.rchild = 0;HTi.parent = 0;for(i = n + 1;i = m;+i)HTi.weight = 0;HTi.lchild = 0;HTi.rchild = 0;HTi.parent = 0;/构建哈弗曼树 for(i = n + 1;i = m;+i)Select(HT,i - 1,s1,s2

6、);/选择parent为0且weight最小的两个结点,期序号分别为s1,s2 HTs1.parent = i;HTs2.parent = i;HTi.lchild = s1; HTi.rchild = s2;HTi.weight = HTs1.weight + HTs2.weight;coutn哈弗曼树表如下:endl;/打印哈弗曼树表cout i weight parent lchild rchildendl;HuffmanTree p;for(p=HT+1,i=1;i=m;i+,p+)coutsetw(2)isetw(7)weightsetw(6)parentsetw(7)lchilds

7、etw(8)rchildendl;void Huffmancode(HuffmanTree &HT,HuffmanCode &HC,int n)char *cd;int c,f,start; int i;HC = (HuffmanCode)malloc(n + 1) * sizeof(char *);cd = new charn;cdn - 1 = 0;/编码结束标志 for(i = 1;i = n;+i)start = n - 1;for(c = i,f = HTi.parent;f != 0;c = f,f =HTf.parent)if(HTf.lchild = c)cd-start =

8、0;else cd-start = 1;HCi = (char *)malloc(n - start) * sizeof(char);strcpy(HCi,&cdstart);cout endl; cout哈夫曼编码如下:;for(i=1;i=n;+i)/逐个字符求赫夫曼编码 start=n-1;for(c=i,f=HTi.parent;f!=0;c=f,f=HTf.parent)/从叶子到根逆向求编码if(HTf.lchild=c)cd-start=0;elsecd-start=1;HCi=(char*)malloc(n-start)*sizeof(char);/为第i个字符编码分配空间st

9、rcpy(HCi,&cdstart);/从cd复制编码到HC printf(nHT%d 节点的哈夫曼编码是: %s 对应权值为:%d,i,HCi,HTi.weight);coutendl;free(cd);int main()HuffmanTree HT;HuffmanCode HC;int *w;char *e;char c;int i,n,m,wei;cout -请输入哈弗曼树的带权数目- n;w = new intn + 1;e = new charn + 1;for(i = 1;i = n;i+)cout -请输入第 i wei;wi = wei;HuffmanCoding(HT,w,n);m = 2 * n - 1;Huffmancode(HT,HC,n);return 0;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com