资源描述:
《数据结构实验报告-树》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、数据结构实验报告实验名称:实验二树学生姓名:高鹏班级:2011211123班内序号:19学号:2011211442口期:2012年11月28口1.实验要求利用二叉树结构实现赫夫曼编/解码器。基本要求:1、初始化(Init):能够对输入的任意长度的字符串s进行统计,统计每个字符的频度,并建立赫夫曼树2、建立编码表(CreateTable):利用已经建好的赫夫曼树进行编码,并将每个字符的编码输出。3、编码(Encoding):根据编码表对输入的字符串进行编码,并将编码后的字符串输出。4、译码(Decoding):利用已经建好的赫夫曼树对编码后的字符串进行译码,
2、并输出译码结果。5、打印(Print):以直观的方式打印赫夫曼树(选作)6、计算输入的字符串编码前和编码后的长度,并进行分析,讨论赫夫曼编码的压缩效果。测试数据:IlovedataStructure,IloveComputer0IwilltrymybesttostudydataStructure.2.程序分析2.1存储结构哈夫曼树2.2关键算法分析(1)构造哈夫曼树与编码表;(2)建立编码、解码、选择、逆置与打印函数;(3)输入需要编码的字符,选择出其屮权值最小的两个字符;(4)对字符进行编码并逆置;(5)打印出编码表和频度排序表。关键代码分析:1、主函数
3、:#include#include#include#includezzcolorConsole・h〃#include,zdsa.h"voidmain(){HANDLEhandle;//使用句柄初始化界面handie二initiate();WORDwColors[1],wColorsl[1],wColors2[1];wColors[0]二FOREGROU'DJBLUE
4、FOREGROUND一RED;wColorsl[0]二FOREGROUNDGREEN
5、FOREGROUNDRED;wColors2[0]
6、二FOREGROUND_GREEN
7、FOREGROUND_BLUE;for(inta=l;a<=3;a++)textout(handle,20,8,wColors2,1,"哈夫曼树欢迎您的到来;Sleep(500);textout(handle,20,&wColors2,1,"“);Sleep(500);}intflagl(0),flag2(0),flag3(0);wh订e(!flagl){system("CLS");//清屏flag2=0;textout(handle,20,3,wColorsl,1,"哈夫曼树欢迎您的到来;textout(handle,
8、20,7,wColors2,1,"请输入任意字符串,以#结束:");//得到字符数组intt(-1),k(0);char_s[100];arraya[100],aChange[100];for(inti=0;i<100;i++){cin>>a[i].data;_s[i]二a[i].data;a[i].mark=-l;aChange[i].mark=0;t++;if(a[i].data二二'#')break;}_s[t]二, ,;〃得到字符的频度for(intj=O;j9、j].data;aChange[k].mark=l;for(intl=j+l;l10、mcpy(ar,st.c_str(),lcngth);ar[length]=, ';stringstl=hu.Decode(ar,k);//设定菜单栏while(!flag2)system("CLS");textout(handle,20,5,wColors2,1,"1.输入的字符及频度textout(handle,20,7,wColorsl,1,"2・对应的哈夫曼树textout(handle,20,9,wColors2,1,"3.对应的哈夫曼编码表textout(handle,20,11,wColorsl,1,"4.对应的哈夫曼编码textout(h
11、andle,20,13,wColors2,1,"5.对应的字符串t