欢迎来到天天文库
浏览记录
ID:22290713
大小:85.61 KB
页数:6页
时间:2018-10-28
《数据结构实验报告haffman编码与译码》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、实验报告2013学年第一学期任课老师:课程名称数据结构班级学号姓名实验名称实验二Haffman编码与译码实验时间实验环境VisualC++6.0实验目的和内容要求实验二Huffman编码与译码1.实验目的用C/C++,Java程序实现课本中的有关算法,以达到对算法熟练的目的。2.实验内容输入若干个权,建立Huffman树,并进行Huffman编码与译码实验过程记录(学生写出实验步骤及中间的结果与现象,在实验中做了什么,怎么做,发生的现象和屮间结果)哈夫曼树又称最优树,是一类带权路径长度最短的树,在开始写代码之前,先弄清几个步骤,先建
2、立一个哈夫曼树。#includeusingnamespacestd;typedefstruct{chara;intweight;intparent;intlchild;intrchild;}IITNode,*IIuffman_Tree;在完成哈夫曼树的过程中注意题目的要求来实现功能。存放n个字符的权值(均〉0),构造哈夫曼树HT,并求出n个字符的哈夫曼编码。intHuffmanCoding(HuffmanTree&HT,intn){_intm=2氺n-1;HT=(HuffmanTree)malloc((m+1)*
3、sizeof(HTNode));for(intk=l;k<=n;k++){coiit〈〈"请输入一个字符:〃;cin〉〉HT[k].a;C0Ut<<"请输入这个字符的权重cin〉〉HT[k]•weight;HT[k].parent二-1;IIT[k].rchild=-l;HT[k].lchild=-l;}for(intkl=n+l;kl<=m;kl++){llT[kl].a=0;HT[kl].weight=0;HT[kl].parent=-l;HT[kl].rchild=-l;HT[kl].lchild=-l;}for(intk2=
4、n+l;k2<=m;k2++){intml,m2;ml=m2=0x7fff;//最小的权重inti=0;intj=0;//指向最小权重的位置for(intp=l;p5、ht+HT[j].weight;HT[k2].lchild^i;HT[k2].rchild=j;}intb[5][5];Cout〈〈"输出的哈弗曼编码为:"〈〈endl;for(intk3=l;k3<=5;k3++)intf=k3;intc=f;ints=0;f=HT[k3].parent;while(f!=-l){if(HT[f].lchild==c){b[k3][s]=0;}elseb[k3][s]=l;s++;c=f;f=HT[f].parent;}cout〈〈HT[k3].a〈〈〃:";for(intj=s-l;j>=0;j6、—){cout<>n;IIuffmanCoding(ht,n);system("PAUSE”);return0;}然后在主函数中调用哈夫曼编码函数,设定简单的输入信息的函数即可完成程序。实验结果分析与总结1、程序运行结果(请提供所完成的各道题运行结果界面截图):型冃主冃主冃主冃主冃主冃主冃主冃主冃主目输-F7、-P11mll11mll11mll11mll11mll+1—:>权权权权曰B只:a的:b的:c的:d的:e的码iiuiuismm瓦人人人人人人人人人人—A,5I选I选I选I选I选哈njAlAlAlAlAlAlAlAlAu的.IH〈I8、^4-9、±-10、0n为大于2的0001111续继键意0-ft-01按:主冃iTK2、在实验过程屮遇到的问题与解决方法:问题存在于对于从叶子到根的逆向求编码,此处思路有一些混乱,但大致理解了,经过诸多调试还是完成了基本思路。唯一的遗憾是在对于储存编码的动态二维数组的处理上,用变量定义二维数组以此达到通过输11、入来控制数组大小的思路,在实现上似乎出现了版本fu]题,之前运行时没有M题,截图时却提示出错,很明显要解决只能通过动态分配來达到。程序中实现时用了赋值來完成。3、实验过程中的发现与收获,未解决或需进一步解决的问题:实验屮体会到了非线性
5、ht+HT[j].weight;HT[k2].lchild^i;HT[k2].rchild=j;}intb[5][5];Cout〈〈"输出的哈弗曼编码为:"〈〈endl;for(intk3=l;k3<=5;k3++)intf=k3;intc=f;ints=0;f=HT[k3].parent;while(f!=-l){if(HT[f].lchild==c){b[k3][s]=0;}elseb[k3][s]=l;s++;c=f;f=HT[f].parent;}cout〈〈HT[k3].a〈〈〃:";for(intj=s-l;j>=0;j
6、—){cout<>n;IIuffmanCoding(ht,n);system("PAUSE”);return0;}然后在主函数中调用哈夫曼编码函数,设定简单的输入信息的函数即可完成程序。实验结果分析与总结1、程序运行结果(请提供所完成的各道题运行结果界面截图):型冃主冃主冃主冃主冃主冃主冃主冃主冃主目输-F
7、-P11mll11mll11mll11mll11mll+1—:>权权权权曰B只:a的:b的:c的:d的:e的码iiuiuismm瓦人人人人人人人人人人—A,5I选I选I选I选I选哈njAlAlAlAlAlAlAlAlAu的.IH〈I
8、^4-
9、±-
10、0n为大于2的0001111续继键意0-ft-01按:主冃iTK2、在实验过程屮遇到的问题与解决方法:问题存在于对于从叶子到根的逆向求编码,此处思路有一些混乱,但大致理解了,经过诸多调试还是完成了基本思路。唯一的遗憾是在对于储存编码的动态二维数组的处理上,用变量定义二维数组以此达到通过输
11、入来控制数组大小的思路,在实现上似乎出现了版本fu]题,之前运行时没有M题,截图时却提示出错,很明显要解决只能通过动态分配來达到。程序中实现时用了赋值來完成。3、实验过程中的发现与收获,未解决或需进一步解决的问题:实验屮体会到了非线性
此文档下载收益归作者所有