欢迎来到天天文库
浏览记录
ID:11090051
大小:132.00 KB
页数:15页
时间:2018-07-10
《数据结构—赫夫曼编码的应用》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、数据结构课程设计张三一、课题名称:赫夫曼编码的应用二、课题来源:课程组自拟三、课题类型:综合型四、目的意义:1.学会编写实现树的各种操作的算法;2.掌握树的定义、存储结构;3.掌握哈夫曼树的建立和实现哈夫曼编码,解码及译码。五、基本要求:对输入的一串电文字符实现赫夫曼编码,再对赫夫曼编码生成的代码串进行译码,输出电文字符串。(1)根据输入的一串电文字符,建立赫夫曼树,并输出显示赫夫曼树。(2)对输入的一串电文字符实现赫夫曼编码,为每个字符生成它们的编码。(3)实现赫夫曼编码的解码。六、运行环境使用《数据结构》(严蔚敏,吴伟民,1997,C语言版)中给出的算法,将二叉树存放在连续空
2、间里(静态链表),空间的每个结点内仍有左子树、右子树、双亲等指针。使用VC++6.0软件实现。七.课程设计步骤简介1I:初始化(Initialization)。从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树。2E:编码(Encoding)。利用已建好的哈夫曼树对输入的字符进行编码。3D:译码(Decoding)。利用已建好的哈夫曼树对输入的字符进行译码。编码算法:(1)对输入的一段欲编码的字符串进行统计各个字符出现的次数,并它们转化为权值{w1,w2,……,wN}构成n棵二叉树的集合F={T1,T2,……,Tn}把它们保存到结构体数组HT『n』中,其中{Ti是按它们
3、的ASCⅡ15数据结构课程设计张三码值先后排序。其中每棵二叉树Ti中只有一个带权为Wi的根结点的权值为其左、右子树上根结点的权值之和。(2)在HT『1..i』中选取两棵根结点的权值最小且没有被选过的树作为左右子树构造一棵新的二叉树,且置新的二叉树的根结点的权值为左、右子树上根结点的权值之和。(3)哈夫曼树已经建立后,从叶子到根逆向求每一个字符的哈夫曼编码。.译码算法:译码的过程是分解电文中字符串,从根出发,按字符'0',或'1'确定找左孩子或右孩子,直至叶子结点,便求的该子串相应字符并输出接着下一个字符。八.流程图1赫夫曼树的初始化:开始intifor(i=0;i4、是T[i].weight=0T[i].parent=-1T[i].lchild=-1T[i].rchild=-1结束15数据结构课程设计张三2输入赫夫曼树的数据:开始inti;floatk;printf("请输入%d个结点的权值:",n);for(i=0;i5、ent==-1)if(T[i].weight*p2)是intt=*p1;*p1=*p2;*p2=t;否结束15数据结构课程设计张三4建赫夫曼树:开始inti,p1,p2;inithf(T);inputhf(T);for(i=n;i6、T[p2].parent=i;T[i].lchild=p1;T[i].rchild=p2;T[i].weight=T[p1].weight+T[p2].weight;结束15数据结构课程设计张三5赫夫曼编码表:开始inti,c,p,start;charcd[n+1];cd[n]=' ';printf("请输入%d个字符作为电文内容:",n);for(i=0;i=0){cd[--start]=(T[p].lchild==c)?'0':'1';c=p;}strc7、py(H[i].bits,&cd[start]);printf("电文的哈夫曼编码如下:");for(i=0;i
4、是T[i].weight=0T[i].parent=-1T[i].lchild=-1T[i].rchild=-1结束15数据结构课程设计张三2输入赫夫曼树的数据:开始inti;floatk;printf("请输入%d个结点的权值:",n);for(i=0;i5、ent==-1)if(T[i].weight*p2)是intt=*p1;*p1=*p2;*p2=t;否结束15数据结构课程设计张三4建赫夫曼树:开始inti,p1,p2;inithf(T);inputhf(T);for(i=n;i6、T[p2].parent=i;T[i].lchild=p1;T[i].rchild=p2;T[i].weight=T[p1].weight+T[p2].weight;结束15数据结构课程设计张三5赫夫曼编码表:开始inti,c,p,start;charcd[n+1];cd[n]=' ';printf("请输入%d个字符作为电文内容:",n);for(i=0;i=0){cd[--start]=(T[p].lchild==c)?'0':'1';c=p;}strc7、py(H[i].bits,&cd[start]);printf("电文的哈夫曼编码如下:");for(i=0;i
5、ent==-1)if(T[i].weight*p2)是intt=*p1;*p1=*p2;*p2=t;否结束15数据结构课程设计张三4建赫夫曼树:开始inti,p1,p2;inithf(T);inputhf(T);for(i=n;i6、T[p2].parent=i;T[i].lchild=p1;T[i].rchild=p2;T[i].weight=T[p1].weight+T[p2].weight;结束15数据结构课程设计张三5赫夫曼编码表:开始inti,c,p,start;charcd[n+1];cd[n]=' ';printf("请输入%d个字符作为电文内容:",n);for(i=0;i=0){cd[--start]=(T[p].lchild==c)?'0':'1';c=p;}strc7、py(H[i].bits,&cd[start]);printf("电文的哈夫曼编码如下:");for(i=0;i
6、T[p2].parent=i;T[i].lchild=p1;T[i].rchild=p2;T[i].weight=T[p1].weight+T[p2].weight;结束15数据结构课程设计张三5赫夫曼编码表:开始inti,c,p,start;charcd[n+1];cd[n]=' ';printf("请输入%d个字符作为电文内容:",n);for(i=0;i=0){cd[--start]=(T[p].lchild==c)?'0':'1';c=p;}strc
7、py(H[i].bits,&cd[start]);printf("电文的哈夫曼编码如下:");for(i=0;i
此文档下载收益归作者所有