1、查询与排序实验报告 学院 专业 班 学号 姓名 协作者_教师评定_实验题目 查询与排序 综合实验评分表指导教师评分标准序号评分项目评分标准满分打分1完成度按要求独立完成实验准备、程序调试、实验报告撰写。202实验内容(1) 完成功能需求分析、存储结构设计;(2) 程序功能完善、可正常运行;(3) 测试数据正确,分析正确,结论正确。303实验报告内容齐全,符合要求,文理通顺,排版美观。404总结对实验过程遇到的问题能初步独立分析,解决后能总结问题原因及解决方法,有心得体会。10实验报告一、 实验目的与要求1、掌握散列表的构造及实现散列查找;2、掌握堆排序的算法;3、综合比较各类排序算法的性能。二
2、、 实验内容#includestdio.h#includestdlib.h#includestring.h#includewindows.h#define MAX 20typedef struct unsigned long key; int result; char name30;RNode;RNode tMAX,rMAX;int h(unsigned long k) /*散列函数*/ return(k-3109005700)%11);void insert(RNode t,RNode x) /*插入函数,以线性探查方法解决冲突*/ int i,j=0; i=h(x.key); while(
3、j0) j+; if(j=MAX) printf(fulln); i=(i+j)%MAX; if(ti.key=0) ti=x; else if(ti.key=x.key) printf(记录已存在!n); int search(RNode t,unsigned long k) /*插入函数,以线性探查方法解决冲突*/ int i,j=0; i=h(k); while(jMAX)&(t(i+j)%MAX.key!=k)&(t(i+j)%MAX.key!=0) j+; i=(i+j)%MAX; if(ti.key=k) return(i); if(j=MAX) return MAX; else
4、return(-i);void sift(RNode r,int v,int w) int i,j; RNode a; i=v; a=ri; j=2*i+1; while(j=w) if(jrj+1.result) j+; if(a.resultrj.result) ri=rj;i=j;j=2*j+1; else break; ri=a;void sort(RNode r,int n) int i; RNode y; for(i=n/2-1;i=0;i-) sift(r,i,n-1); for(i=n-1;i0;i-) y=r0;r0=ri;ri=y; printf(学生姓名:%st学生学号:
5、%ut学生成绩:%dn,ri.name,ri.key,ri.result); sift(r,0,i-1); printf(学生姓名:%st学生学号:%ut学生成绩:%dn,r0.name,r0.key,r0.result);int menu() /*菜单函数*/ int select; printf(nn); printf(n); printf(tt*查找排序实验*n); printf(tt*n); printf(tt*欢迎进入系统*n); printf(tt* menu: *n); printf(tt* 1.查找 *n); printf(tt* 2.排序 *n); printf(tt* 0.
6、退出 *n); printf(tt*n); printf(n); printf(ttt请输入0-2n ); printf(n); printf(请选择您所要的操作(选择(0)退出):); scanf(%d,&select); getchar(); return(select); void main() /*主函数*/ int i,s,n,select; int j=0,m=0; RNode y; for(i=0;iMAX;i+) ti.key=0; /*初始化*/ for(i=0;i10;i+) /*导入记录*/ switch(i) case 0: RNode x; x.key=310900*
7、; strcpy(x.name, *); x.result=90; insert(t,x); break; case 1: RNode x; x.key=31090*1; strcpy(x.name, *); x.result=95; insert(t,x); break; case 2: RNode x; x.key=3109005*; strcpy(x.name, *); x.result=92; insert(t,x); break; case 3: RNode x; x.key=31090*; strcpy(x.name, *); x.result=93; insert(t,x); b
8、reak; case 4: RNode x; x.key=3109005*; strcpy(x.name, *); x.result=94; insert(t,x); break; case 5: RNode x; x.key=310900*; strcpy(x.name, *); x.result=91; insert(t,x); break; case 6: RNode x; x.key=3109005*; strcpy(x.name, *); x.result=96; insert(t,x); break; case 7: RNode x; x.key=310900*; strcpy(x
9、.name, *); x.result=99; insert(t,x); break; case 8: RNode x; x.key=310900*; strcpy(x.name, *); x.result=98; insert(t,x); break; case 9: RNode x; x.key=310900*; strcpy(x.name,*); x.result=97; insert(t,x); break; printf(nnnnnnn); system(cls); loop: printf(nnn); select=menu(); switch(select) case 1: pr
10、intf(n请输入要查找的学生学号:); scanf(%u,&y.key); s=search(t,y.key); if(s=MAX|s0) printf(not findn); else printf(nn你要查找的学生信息n); printf(学生姓名:%st学生学号:%u,ts.name,ts.key); break; case 2: for(i=0;iMAX;i+) if(ti.key!=0) rj+=ti; m+; printf(排序之前:nn); for(i=0;im;i+) printf(学生姓名:%st学生学号:%ut学生成绩:%dn,ri.name,ri.key,ri.res
11、ult); printf(n排序之后:n); sort(r,m); break; case 0:exit(0); getchar(); goto loop;三、 实验结果和数据处理(1) 查找数据(310900*)(2) 排序四、 总结这次的课程实验完成了主控界面,录入,输出,排序,查找,结束界面等功能。在程序调试过程之中,我还是个初学者,在编写程序的过程中不断出现不同状况的错误,在修改中不断发现自己的问题和不足。通过编译调试,程序提示错误所在,然后我们根据提示再进行修改。从这个过程之中,使我多多思考问题,不断摸索,尽量自己发现错误所在并加以改正,以便在下次不再犯同类型的错误。也就是说在调试的过程中,不断的学习,不断的改进,提高自身C语言学习能力和算法设计能力。五、 问题与讨论1、 分析你所构造散列表的查找成功的平均查找长度?012345678910333435363738394041321111111111查找成功的平均查找长度:(1+1+1+1+1+1+1+1+1+1)/10=12、 堆排序属于什么类型的排序?它适合于什么要求的排序,其空间按复杂度和时间复杂度如何?答:堆排序属于树形选择排序方法,它适合于排序较大文件的排序方法,是不稳定的。空间复杂度为O(1),时间复杂度为O(nlog2n).
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1