您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 数据结构实验查找和排序
查找、排序算法的应用班级学号姓名一、实验目的1掌握查找的不同方法,并能用高级语言实现查找算法。2熟练掌握顺序表和有序表的顺序查找和二分查找方法。3掌握排序的不同方法,并能用高级语言实现排序算法。4熟练掌握顺序表的选择排序、冒泡排序和直接插入排序算法的实现。二、实验内容1创建给定的顺序表。表中共包含八条学生信息,信息如下:学号姓名班级C++数据结构1王立0351185762张秋0351178883刘丽0351190794王通0351175865赵阳0351160716李艳0351158687钱娜0351195898孙胜0351145602使用顺序查找方法,从查找表中查找姓名为赵阳和王夏的学生。如果查找成功,则显示该生的相关信息;如果查找不成功,则给出相应的提示信息。3使用二分查找方法,从查找表中查找学号为7和12的学生。如果查找成功,则显示该生的相关信息;如果查找不成功,则给出相应的提示信息。(注意:创建静态查找表时必须按学号的从小到大排列!)4使用直接插入排序方法,对学生信息中的姓名进行排序。输出排序前和排序后的学生信息表,验证排序结果。5使用直接选择排序方法,对学生信息中的C成绩进行排序。输出排序前和排序后的学生信息表,验证排序结果。6使用冒泡排序方法,对学生信息中的数据结构成绩进行排序。输出排序前和排序后的学生信息表,验证排序结果。7编写一个主函数,将上面函数连在一起,构成一个完整程序。8将实验源程序调试并运行。三、实验结果#includeiostream#includestringusingnamespacestd;#definesize10structstudent{stringnum;stringname;stringclassnum;intcscore;intdatascore;};structseqlist{studentstu[size];intlen;};//创建顺序表voidcreate_seq(seqlist&L){intn;cout请输入学生的人数:;cinn;L.len=n;coutendl;cout请输入学生信息:endl;cout学号姓名班级C++成绩数据结构成绩endl;for(inti=1;i=L.len;i++){cinL.stu[i].numL.stu[i].nameL.stu[i].classnumL.stu[i].cscoreL.stu[i].datascore;}}//输出顺序表的信息voiddisplay(seqlistL){cout学号姓名班级C++成绩数据结构成绩endl;for(inti=1;i=L.len;i++){coutL.stu[i].numL.stu[i].nameL.stu[i].classnumL.stu[i].cscoreL.stu[i].datascoreendl;}coutendl;}//顺序查找voidseq_search(seqlistL,stringn){inti=1;while(i=L.len&&L.stu[i].name!=n){i++;}if(iL.len){cout该生不存在endl;return;}coutL.stu[i].numL.stu[i].nameL.stu[i].classnumL.stu[i].cscoreL.stu[i].datascoreendl;}//折半查找voidbin_search(seqlistL,stringn){intlow,high,mid;low=1;high=L.len;while(low=high){mid=(low+high)/2;if(L.stu[mid].num==n){coutL.stu[mid].numL.stu[mid].nameL.stu[mid].classnumL.stu[mid].cscoreL.stu[mid].datascoreendl;return;}elseif(nL.stu[mid].num){high=mid-1;}else{low=mid+1;}}cout该学生不存在endl;}//直接选择排序voidselectsort(seqlistL){intk;studenttemp;for(inti=1;i=L.len-1;i++){k=i;for(intj=i+1;j=L.len;j++){if(L.stu[j].cscoreL.stu[k].cscore)k=j;}if(k!=i){temp=L.stu[i];L.stu[i]=L.stu[k];L.stu[k]=temp;}}display(L);}voidbubblesort(seqlistL){inti,j,flag=1;studentw;for(i=1;(i=L.len-1)&&(flag);i++){flag=0;for(j=L.len;j=i+1;j--)if(L.stu[j].datascoreL.stu[j-1].datascore){w=L.stu[j];L.stu[j]=L.stu[j-1];L.stu[j-1]=w;flag=1;}}display(L);}voidinsertsort2(seqlistL){inti,j;for(i=2;i=L.len;i++)if(L.stu[i].nameL.stu[i-1].name){L.stu[0]=L.stu[i];//复制为哨兵for(j=i-1;L.stu[0].nameL.stu[j].name;j--)L.stu[j+1]=L.stu[j];//记录后移L.stu[j+1]=L.stu[0];//插入到正确位置}cout排序后学生的信息如下:endl;display(L);}voidmain(){seqlistL;cout创建顺序表endl;create_seq(L);cout输出顺序表endl;display(L);cout顺序查找endl;seq_search(L,赵阳);seq_search(L,王夏);cout折半查找endl;bin_search(L,7);bin_search(L,12);cout直接插入排序endl;insertsort2(L);cout直接选择排序endl;selectsort(L);cout冒泡排序endl;bubblesort(L);}执行结果如下:四、实验总结1.对于String类的应用时要用usingnamespacestd;而不能直接用Sting.h,那样总是说前面少一个分号。2.书写时要认真,总是会写错一些字母,有些错误也不会显示,到输出结果时没有结果,注意这种问题。
本文标题:数据结构实验查找和排序
链接地址:https://www.777doc.com/doc-5528958 .html