版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验五:查找和排序班级B09513学号200940姓名一、实验目的1掌握查找的不同方法,并能用高级语言实现查找算法。2熟练掌握顺序表和有序表的顺序查找和二分查找方法。3掌握排序的不同方法,并能用高级语言实现排序算法。4熟练掌握顺序表的选择排序、冒泡排序和直接插入排序算法的实现。二、实验内容1创建给定的静态查找表。表中共包含十条学生信息,信息如下:学号姓名班级C++数据结构1王立0351185762张秋0351178883刘丽0351190794王通0351175865赵阳0351160716李艳0351158687钱娜0351195898孙胜0351145602使用顺序查找方法,从查找表中查找姓名为赵阳和王夏的学生。如果查找成功,则显示该生的相关信息;如果查找不成功,则给出相应的提示信息。3使用直接插入排序方法,按姓名对学生信息进行排序。输出排序前和排序后的学生信息表,验证排序结果。4使用直接选择排序方法,对学生信息中的C成绩进行排序。输出排序前和排序后的学生信息表,验证排序结果。5使用二分查找方法,从查找表中查找C成绩为79和80的学生。如果查找成功,则显示该生的相关信息;如果查找不成功,则给出相应的提示信息。6使用冒泡排序方法,对学生信息中的数据结构成绩进行排序。输出排序前和排序后的学生信息表,验证排序结果。7编写一个主函数,将上面函数连在一起,构成一个完整程序。8将实验源程序调试并运行。注意:每完成一个操作必须进行输出,以验证操作的正确性。三、实验结果#include<iostream>#include<string>#include<iomanip>usingnamespacestd;constintMAX=100;typedefstruct{ intnum;stringname; intclassnum; intcs; intss;}DataType;typedefstruct{ DataTypedata[MAX]; intlength;}SNode;voidInit(SNode*t){ t->length=0;}voidCreate(SNode*t,inta[],stringb[],intc[],intd[],inte[],intn) //创建{ for(inti=0;i<n;i++) { t->data[i+1].num=a[i]; t->data[i+1].name=b[i]; t->data[i+1].classnum=c[i]; t->data[i+1].cs=d[i]; t->data[i+1].ss=e[i]; t->length++; }}voidDisplay(SNode*t,inti) //输出学生的相关信息{cout.setf(ios::right);cout<<setw(8)<<"学号"<<setw(10)<<"姓名"<<setw(10)<<"班级"<<setw(10)<<"C++成绩"<<setw(15)<<"数据结构成绩"<<endl;cout.setf(ios::right); cout<<setw(8)<<t->data[i].num<<setw(10)<<t->data[i].name<<setw(10)<<t->data[i].classnum<<setw(10)<<t->data[i].cs<<setw(15)<<t->data[i].ss<<endl;}voidN_Search(SNode*t,stringkn) //按姓名查找{ inti; i=t->length; t->data[0].name=kn;while(t->data[i].name!=kn) i--; if(i==0) cout<<"······对不起,没有该姓名的学生!········"<<endl; else { cout<<"····找到了!······"<<endl;Display(t,i); } }voidC_Search(SNode*t,intcs1) //二分查找C成绩{inti=1;intflag,flag1;intlow,high,mid,low1,high1,mid1;low=1;low1=1;high=t->length;high1=t->length;flag1=0;flag=0;while(low<=high){ mid=(low+high)/2; if(cs1<t->data[mid].cs) high=mid-1; else { if(cs1>t->data[mid].cs) low=mid+1; else { flag=mid; break; } }}if(flag==0) cout<<"没有该成绩的学生!"<<endl;else{ cout<<"---------该学生的信息:-----------"<<endl;Display(t,flag);}}voidN_Sort(SNode*t,intn) //直接插入法对学生的姓名进行排序{ inti; intj; DataTypep; for(i=2;i<=n;i++) { if(t->data[i].name<t->data[i-1].name) { t->data[0].name=t->data[i].name; for(j=i-1;t->data[0].name<t->data[j].name;j--) { p=t->data[j]; t->data[j]=t->data[j+1]; t->data[j+1]=p; } } }}voidC_Sort(SNode*t,intn){ inti,j,k; for(i=1;i<n;i++) { for(k=i,j=i+1;j<=n;j++) if(t->data[j].cs<t->data[k].cs) k=j; if(i!=k) { t->data[0]=t->data[k]; t->data[k]=t->data[i]; t->data[i]=t->data[0]; } }}voidS_Sort(SNode*t,intn) //冒泡法对数据结构排序{ inti,j; intswap; for(i=1;i<n;i++) { swap=0; for(j=1;j<=n-i;j++) if(t->data[j].ss>t->data[j+1].ss) { t->data[0]=t->data[j]; t->data[j]=t->data[j+1]; t->data[j+1]=t->data[0]; swap=1; } if(swap==0) break; }}intmain(){ SNodes; Init(&s); inti; inta[8]={1,2,3,4,5,6,7,8};stringb[8]={"王立","张秋","刘丽","王通","赵阳","李艳","钱娜","孙胜"};intc[8]={03511,03511,03511,03511,03511,03511,03511,03511};intd[8]={85,78,90,75,60,58,95,45};int e[8]={76,88,79,86,71,68,89,60}; Create(&s,a,b,c,d,e,8); stringnames;intscore; cout<<"请输入您要查找的学生的姓名:";cin>>names;N_Search(&s,names); cout<<"请输入您要查找的学生的姓名:"; cin>>names;N_Search(&s,names); cout<<"--------姓名排序--------"<<endl; cout<<"********排序前的输出结果:********"<<endl;for(i=1;i<9;i++) Display(&s,i); N_Sort(&s,8); cout<<"********排序后的输出结果:********"<<endl; for(i=1;i<9;i++) Display(&s,i); cout<<"------C++成绩排序--------"<<endl; cout<<"********排序前的输出结果:********"<<endl; for(i=1;i<9;i++) Display(&s,i); C_Sort(&s,8); cout<<"********排序后的输出结果:********"<<endl; for(i=1;i<9;i++) Display(&s,i); cout<<"---------二分查找法对C++成绩的查找----------"<<endl; cout<<"请输入您要查找的学生的C++成绩:";cin>>score; C_Search(&s,score); cout<<"请输入您要查找的学生的C++成绩:";cin>>score; C_Search(&s,score); cout<<"-------数据结构排序-------"<<endl; cout<<"********排序前的输出结果:********"<<endl; for(i=1;i<9;i++) Display(&s,i); cout<<"********排序后的输出结果:********"<<endl;S_Sort(&s,8); for(i=1;i<9;i++) Display(&s,i);}试验结果:直接插入法按姓名对学生的信息排序:排序前:排序后:直接选择法对C++成绩进行排序:排序前:排序后:二分法队学生的成绩进行查找:冒泡法对学生的数据结构成绩进行排序:排序前:排序后:四、实验总结1、关键码是数据元素中某个数据项的值,它
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025山西长治市第三人民医院第二次招聘聘用制工作人员6人考试历年真题汇编附答案
- 2025年上半年黑龙江工业学院博士(思政类)招聘5人(公共基础知识)综合能力测试题附答案
- 2026新余燃气有限公司工作人员招聘1人笔试备考题库及答案解析
- 2026云南佰胜企业管理有限公司招聘笔试备考试题及答案解析
- 医疗扶贫项目年终义诊总结【演示文档课件】
- 2025秋人教版道德与法治八年级上册5.1文明有礼同步练习
- 2026年保山市昌宁县机关事务管理局招聘编外工作人员(1人)笔试参考题库及答案解析
- 2026西北工业大学动力与能源学院爆震燃烧团队非事业编人员招聘1人(陕西)笔试参考题库及答案解析
- (能力提升)2025-2026学年下学期人教统编版小学语文四年级第七单元练习卷
- 2026辽宁省精神卫生中心招聘高层次和急需紧缺人才7人笔试备考题库及答案解析
- UL1995标准中文版-2018加热和冷却设备UL中文版标准
- 2024至2030年中国家用燃气具数据监测研究报告
- 2024版租房合同协议书下载
- 宝宝喂养记录表
- 《保健食品标识培训》课件
- 2023年非标自动化机械设计工程师年度总结及来年计划
- 丹鹿通督片治疗腰椎疾病所致腰椎狭窄128例
- 股骨颈骨折围手术期护理
- 高空作业车使用说明书
- 保安公司介绍PPT模板
- 医疗质量与安全管理小组活动记录
评论
0/150
提交评论