实验树及其应用.docx
- 文档编号:10632592
- 上传时间:2023-02-22
- 格式:DOCX
- 页数:36
- 大小:117.80KB
实验树及其应用.docx
《实验树及其应用.docx》由会员分享,可在线阅读,更多相关《实验树及其应用.docx(36页珍藏版)》请在冰豆网上搜索。
实验树及其应用
(本实验项目方案受“教育部人才培养模式创新实验区(X3108005)”项目资助)
实验难度:
A□B□C■
序号
学号
姓名
成绩
指导教师
(签名)
学 期:
2014秋季学期
任课教师:
张德海王常吉
实验题目:
树及其应用
小组长:
联系电话:
电子邮件:
完成提交时间:
2014年12月7日
云南大学软件学院2010学年秋季学期
《数据结构实验》成绩考核表
学号:
20131120267姓名:
蔡智霖本人承担角色:
代码设计,算法分析,运行监测,填写报告
评分项目
评分指标
分值
得分
实验构思(10%)
1.实验目的明确
5
2.实验内容理解透彻、对实验所涉及到的知识点分析到位
5
实验设计(15%)
1.有对基本数据结构的抽象数据类型定义
5
2.实验方案设计完整,数据结构、算法选择合理
5
3.算法结构和程序功能模块之间逻辑清晰、有相应的流程图
5
实验实现(25%)
1.代码编写规范、风格统一、注释清楚易读
5
2.程序运行正常,测试结果正确
15
3.界面友好、易于操作、有较强的容错性
5
实验报告撰写(10%)
1.内容详实无缺漏,文字流畅、图表清楚
5
2.实验结果分析客观、详细,实验体会真实可信,对原实验方案的改进和对实验内容的发散性思考
5
个人工作量(30%)
1.个人完成工作量
15
2.个人技术水平
10
3.团队合作精神
5
实验运作(10%)
1.有一定用户群
5
2.应用前景分析
5
综合得分:
(满分100分)
指导教师:
年月日
云南大学软件学院2010学年秋季学期
《数据结构实验》成绩考核表
学号:
20131120272姓名:
邓飞武本人承担角色:
结果检验,实验构思,调试代码
评分项目
评分指标
分值
得分
实验构思(10%)
1.实验目的明确
5
2.实验内容理解透彻、对实验所涉及到的知识点分析到位
5
实验设计(15%)
1.有对基本数据结构的抽象数据类型定义
5
2.实验方案设计完整,数据结构、算法选择合理
5
3.算法结构和程序功能模块之间逻辑清晰、有相应的流程图
5
实验实现(25%)
1.代码编写规范、风格统一、注释清楚易读
5
2.程序运行正常,测试结果正确
15
3.界面友好、易于操作、有较强的容错性
5
实验报告撰写(10%)
1.内容详实无缺漏,文字流畅、图表清楚
5
2.实验结果分析客观、详细,实验体会真实可信,对原实验方案的改进和对实验内容的发散性思考
5
个人工作量(30%)
1.个人完成工作量
15
2.个人技术水平
10
3.团队合作精神
5
实验运作(10%)
1.有一定用户群
5
2.应用前景分析
5
综合得分:
(满分100分)
指导教师:
年月日
云南大学软件学院2010学年秋季学期
《数据结构实验》成绩考核表
学号:
20131120247姓名:
温岩松本人承担角色:
错误总结,结果验证,调试代码
评分项目
评分指标
分值
得分
实验构思(10%)
1.实验目的明确
5
2.实验内容理解透彻、对实验所涉及到的知识点分析到位
5
实验设计(15%)
1.有对基本数据结构的抽象数据类型定义
5
2.实验方案设计完整,数据结构、算法选择合理
5
3.算法结构和程序功能模块之间逻辑清晰、有相应的流程图
5
实验实现(25%)
1.代码编写规范、风格统一、注释清楚易读
5
2.程序运行正常,测试结果正确
15
3.界面友好、易于操作、有较强的容错性
5
实验报告撰写(10%)
1.内容详实无缺漏,文字流畅、图表清楚
5
2.实验结果分析客观、详细,实验体会真实可信,对原实验方案的改进和对实验内容的发散性思考
5
个人工作量(30%)
1.个人完成工作量
15
2.个人技术水平
10
3.团队合作精神
5
实验运作(10%)
1.有一定用户群
5
2.应用前景分析
5
综合得分:
(满分100分)
指导教师:
年月日
云南大学软件学院2010学年秋季学期
《数据结构实验》成绩考核表
学号:
20131120258姓名:
程哲本人承担角色:
调试代码,错误总结,实验分析
评分项目
评分指标
分值
得分
实验构思(10%)
1.实验目的明确
5
2.实验内容理解透彻、对实验所涉及到的知识点分析到位
5
实验设计(15%)
1.有对基本数据结构的抽象数据类型定义
5
2.实验方案设计完整,数据结构、算法选择合理
5
3.算法结构和程序功能模块之间逻辑清晰、有相应的流程图
5
实验实现(25%)
1.代码编写规范、风格统一、注释清楚易读
5
2.程序运行正常,测试结果正确
15
3.界面友好、易于操作、有较强的容错性
5
实验报告撰写(10%)
1.内容详实无缺漏,文字流畅、图表清楚
5
2.实验结果分析客观、详细,实验体会真实可信,对原实验方案的改进和对实验内容的发散性思考
5
个人工作量(30%)
1.个人完成工作量
15
2.个人技术水平
10
3.团队合作精神
5
实验运作(10%)
1.有一定用户群
5
2.应用前景分析
5
综合得分:
(满分100分)
指导教师:
年月日
(下面的内容由学生填写,格式统一为,字体:
楷体,行距:
固定行距18,字号:
小四,个人报告按下面每一项的百分比打分。
难度A满分70分,难度B满分90分)
一、【实验构思(Conceive)】(10%)
(本部分应包括:
描述实验实现的基本思路,包括所用到的离散数学、工程数学、程序设计、算法等相关知识)
为了建立哈夫曼树以及实现哈夫曼编码,因此我们选择了结点结构体,利用这一结构体,我们定义了一个结构体数组和一个树根指针,数组用来纪录输入数据的多少,树根指针用来连接哈夫曼树。
二、【实验设计(Design)】(20%)
(本部分应包括:
抽象数据类型的功能规格说明、主程序模块、各子程序模块的伪码说明,主程序模块与各子程序模块间的调用关系)
1.数据的输入:
在我的程序中使用函数settree()输入数据,为了能够使数据的不断输入,我使用了一个WHILE{}循环,同时我在开始的时候还定义了输入数据的大小,这样就可以更好的了解输入了多少数据,数据的输入是为了能够建立哈夫曼树。
2.哈弗曼的编码:
本次程序设计的主要目的就是生成哈夫曼树,当然为了这个目的我们就要进行编码,在编码之前我们必须要知道输入的数据即结点的权值的大小,通过权值的大小我们便能够建立哈夫曼树。
在建立好哈夫曼树以后,我们通过哈夫曼编码的定义即使用函数setcode()就可以完成我的目的。
3.哈弗曼编码的输出:
在此次设计中,我们有编码就有输出编码,输出编码我采用了函数disp(),在这个函数中我用到了文件的输入和输出。
因为从开始我们就将输入的数据保存在文件中,所以在对编码的输出就必须从文件中读出,然后才能输出。
三、【实现描述(Implement)】(30%)
(本部分应包括:
抽象数据类型具体实现的函数原型说明、关键操作实现的伪码算法、函数设计、函数间的调用关系,关键的程序流程图等,给出关键算法的时间复杂度分析。
)
程序流程图:
程序的开头:
在我的程序中要用到输入(cin)、输出(cout)、文件的保存,还用到函数isalpha(),所以我们必须添加如下头文件
#include
#include
#include
哈弗曼的定义:
具体代码如下:
structnode
{
intw;//存放结点的权值,假设只考虑处理权值为整数的情况
intflag;
charc;
structnode*plink,*llink,*rlink;//定义哈夫曼树各结点
charcode[27];
}*num[100],*root;
输入数据函数的实现:
为了实现输入数据的函数,我们还调用了函数go()、setcode()、printtree(),在此函数中我使用了一个for循环语句;具体代码如下:
voidsettree(void)
{
inti,j,k;
structnode*p1,*p2,*tmp,*p;
voidgo(structnode*);
voidsetcode(structnode*);/*建立每一个字符的编码*/
voidprinttree(structnode*);
cout<<"输入字符串的长度:
"< cin>>n; while(getchar()! ='\n') continue; ofstreamfile("hfmtree.txt",ios: : out|ios: : in); for(i=0;i { p=(structnode*)malloc(sizeof(structnode)); cout<<"请输入一个字符: "< cin>>p->c; cout<<"请输入这个字符的权: "< cin>>p->w; p->plink=NULL; p->rlink=NULL; p->llink=NULL; num[i]=p; file<<"字符"< } file.close(); for(i=0;i { for(j=i+1;j { if(num[i]->w>num[j]->w) { tmp=num[i]; num[i]=num[j]; num[j]=p; } } } /*开始建立树*/ num[n]=NULL; k=n; while(num[1]! =NULL) { p=(structnode*)malloc(sizeof(structnode)); p1=num[0]; p2=num[1]; p->llink=p1; p->rlink=p2; p->plink=NULL; p1->plink=p; p2->plink=p; p->w=p1->w+p2->w; for(i=1;i { num[i]=num[i+1]; } k--; num[0]=p; for(i=0;i { for(j=i+1;j { if(num[i]->w>num[j]->w) { tmp=num[i]; num[i]=num[j]; num[j]=tmp; } } } } root=num[0]; /*建立完毕*/ /*写入文件,前序*/ ifstreaminfile; infile.open("hfmtree.txt",ios: : in); if(! infile) { cout<<"打开文件错误! "; getchar(); } else setcode(root); file.close(); } 哈弗曼编码函数的实现: 在这个函数中我使用了文件的有关方面的内容,同时也采用了一个while循环语句,具体代码如下: voidcode(void) { FILE*fp1,*fp2,*fp3; charch1,ch2,c; if((fp1=fopen("c: \\hfmtree.txt","rb"))==NULL) { cout<<"打开文件错误! "; getchar(); } if((fp2=fopen("c: \\tobetrans.txt","rb"))==NULL) { cout<<"打开文件错误! "; getchar(); } if((fp3=fopen("c: \\codefile.txt","wb"))==NULL) { cout<<"打开文件错误! "; getchar(); } while((ch1=fgetc(fp2))! =EOF) { t=0; while((ch2=fgetc(fp1))! =EOF) { if(ch1==ch2) { while((c=fgetc(fp1))! =')') { tmpcode[t++]=c; } tmpcode[t]='\0'; fputs(tmpcode,fp3); fputc('@',fp3); rewind(fp1); break; } } } fclose(fp1); fclose(fp2); fclose(fp3); } 哈弗曼编码的输出函数的实现: 在该函数中我用到了文件的打开及读出又关方面的内容,具体代码如下: voiddisp(void) { FILE*fp1,*fp2; charch1,ch2; chartmp[20]; intt; if((fp1=fopen("c: \\hfmtree.txt","rb"))==NULL) { cout<<"打开文件错误! "; getchar(); //exit(0); } if((fp2=fopen("c: \\hfmcode.txt","wb"))==NULL) { cout<<"打开文件错误! "; getchar(); //exit(0); } while((ch1=fgetc(fp1))! =EOF) { if(ch1=='(') { t=0; ch1=fgetc(fp1); ch2=ch1; while((ch1=fgetc(fp1))! =')') { tmp[t++]=ch1; } tmp[t]='\0'; printf("%c-----%s\n",ch2,tmp); fputc(ch2,fp2); fputc('-',fp2); fputc('-',fp2); fputc('-',fp2); fputs(tmp,fp2); fputc('\n',fp2); } } fclose(fp1); fclose(fp2); } 程序的主函数: 在主函数中使用了控制语句goto,具体代码如下: { inti; voidsettree(void);/*建立树*/ voidcode(void); voiddecode(void);/*译码*/ voiddisp(void); root=(structnode*)malloc(sizeof(structnode)); cout<<"******************************哈夫曼编码/译码器******************************"< while (1){ start: cout<<"1.设定处始植"< while(scanf("%d",&i)! =1) { while(getchar()! ='\n') continue; cout<<"输入错误! "< "< } switch(i) { case1: settree(); break; case2: decode(); break; case3: disp(); break; case4: exit(0); default: cout<<"输入错误! "< gotostart; } } }intmain(void) { inti; voidsettree(void);/*建立树*/ voidcode(void); voiddecode(void);/*译码*/ voiddisp(void); root=(structnode*)malloc(sizeof(structnode)); cout<<"******************************哈夫曼编码/译码器******************************"< while (1){ start: cout<<"1.设定处始植"< while(scanf("%d",&i)! =1) { while(getchar()! ='\n') continue; cout<<"输入错误! "< "< } switch(i) { case1: settree(); break; case2: decode(); break; case3: disp(); break; case4: exit(0); default: cout<<"输入错误! "< gotostart; } } } 四、【测试结果(Testing)】(10%) (本部分应包括: 对实验的测试结果,应具体列出每次测试所输入的数据以及输出的数据,并对测试结果进行分析总结) 调试程序后界面出现 输入1以后程序后界面出现 输入3以后程序后界面出现 输入4以后程序后界面出现 四、【实验总结】(10%) (本部分应包括: 自己在实验中完成的任务,注意组内的任意一位同学都必须独立完成至少一项接口的实现;对所完成实验的经验总结、心得) 蔡智霖: 我们合理的分配了任务,并经过我们共同的努力才把这一实验基本完成了。 从这次的实验中,我看到了自己的不足,首先就是比较轻浮,不能够踏踏实实的,其次,就是我个人的动手操作能力,即上机编程能力还是十分欠缺的,这还是我们平时锻炼的少所造成的。 所以在以后的学习中我们要加强这方面的锻炼。 邓飞武: 在做实验前,一定要将课本上的知识吃透,因为这是做实验的基础,否则,在老师讲解时就会听不懂,这将使你在做实验时的难度加大,浪费做实验的宝贵时间. 温岩松: 通过这次实验,使我学到了不少实用的知识,更重要的是,做实验的过程,思考问题的方法,这与做其他的实验是通用的,真正使我们受益匪浅. 程哲: 在这次实验中,我学到很多东西,加强了我的动手能力,并且培养了我的独立思考能力。 特别是在做实验报告时,因为在做数据处理时出现很多问题,如果不解决的话,将会很难的继续下去。 五、【项目运作描述(Operate)】(10%) (本部分应包括: 项目的成本效益分析,应用效果等的分析。 ) 本程序可以实现基本的迷宫求解功能,可以根据使用者所输入的迷宫来判断是否有同路,以及同路路径。 因为本程序并不具备可视化的运行界面,因此本程序并不具备较高的成本价值,但同时也因为本程序制作成本并不高,因此其效益相对来说尚可。 六、【代码】(10%) (本部分应包括: 完整的代码及充分的注释。 注意纸质的实验报告无需包括此部分。 格式统一为,字体: Georgia,行距: 固定行距12,字号: 小五) #include #include #include #include #include #include intn=0; structnode { intw; intflag; charc; structnode*plink,*llink,*rlink; charcode[27]; }*num[100],*root; FILE*fp; chartmpcode[27]; intt=0; intmain(void) { inti; voidsettree(void);/*建立树*/ voidcode(void); voiddecode(void);/*译码*/ voiddisp(void); root=(structnode*)malloc(sizeof(structnode)); cout<<"******************************哈夫曼编码/译码器******************************"< while (1){ start: cout<<"1.设定处始植"< while(scanf("%d",&i)! =1) { while(getchar()! ='\n') continue; cout<<"输入错误! "< "<
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 及其 应用
![提示](https://static.bdocx.com/images/bang_tan.gif)