logo资料库

数据结构 作业报告 实验5查找排序 源代码.doc

第1页 / 共7页
第2页 / 共7页
第3页 / 共7页
第4页 / 共7页
第5页 / 共7页
第6页 / 共7页
第7页 / 共7页
资料共7页,全文预览结束
实验五:查找和排序 一、实验目的 1 掌握查找的不同方法,并能用高级语言实现查找算法。 2 熟练掌握顺序表和有序表的顺序查找和二分查找方法。 3 掌握排序的不同方法,并能用高级语言实现排序算法。 4 熟练掌握顺序表的选择排序、冒泡排序和直接插入排序算法的实现。 二、实验内容 1 创建给定的静态查找表。表中共包含十条学生信息,信息如下: 学号 姓名 1 王立 2 张秋 3 刘丽 4 王通 5 赵阳 6 李艳 7 钱娜 8 孙胜 班级 03511 03511 03511 03511 03511 03511 03511 03511 C++ 85 78 90 75 60 58 95 45 数据结构 76 88 79 86 71 68 89 60 2 使用顺序查找方法,从查找表中查找姓名为赵阳和王夏的学生。如果查找成 功,则显示该生的相关信息;如果查找不成功,则给出相应的提示信息。 3 使用直接插入排序方法,按姓名对学生信息进行排序。输出排序前和排序后 的学生信息表,验证排序结果。 4 使用直接选择排序方法,对学生信息中的 C 成绩进行排序。输出排序前和 排序后的学生信息表,验证排序结果。 5 使用二分查找方法,从查找表中查找 C 成绩为 79 和 80 的学生。如果查找成 功,则显示该生的相关信息;如果查找不成功,则给出相应的提示信息。 6 使用冒泡排序方法,对学生信息中的数据结构成绩进行排序。输出排序前和 排序后的学生信息表,验证排序结果。 7 编写一个主函数,将上面函数连在一起,构成一个完整程序。 8 将实验源程序调试并运行。 注意:每完成一个操作必须进行输出,以验证操作的正确性。 三、实验结果 源文件: 1.Search #define MAXSIZE 10 #include using namespace std; typedef struct{
string name; int number; long Class; int C_score; int Data_score; }DataType; typedef struct { DataType *stu; int length; i,int number,string name,long Class,int C_score,int }Student; void S_Init(Student *t,int Data_score); int S_Search(Student *t,string name); void D_insertsort(DataType *);//直接 按姓名 void select_sort(Datatype *);//直接 按 C 成绩 int Binary_Search(Student *t,int C_score);// 二分 按 C void Bubble_sort(Student *t); //冒泡 void print(Student *t); 2.Search.cpp #include"search.h" #include #include using namespace std; void S_Init(Student *t,int Data_score) { i,int number,string name,long Class,int C_score,int t->stu[i].name=name; t->stu[i].number=number; t->stu[i].Class=Class; t->stu[i].C_score=C_score; t->stu[i].Data_score=Data_score; t->length++; } void S_Search(Student *t,string name) { int i; t->stu[0].name=name;
for(i=t->length;i>0||t->stu[0].name!=name;i--); if(i>0) { cout<<"查无此人"<stu[i].name<<'\t'<stu[i].number<<'\t'<stu[i].Class<<'\t'<stu[i] .C_score<<'\t'<stu[i].Data_score; } void print(Student *s) { int i; cout<<" 学 号 "<<'\t'<<" 姓 名 "<<'\t'<<" 班 级 "<<'\t'<<"C++"<<'\t'<<" 数 据 结 构 "<length;i++) cout<stu[i].name<<'\t'<stu[i].number<<'\t'<stu[i].Class<<'\t'<stu[i] .C_score<<'\t'<stu[i].Data_score; } void D_insertsort(Student *t)//直接 按姓名 { int i,j; for(i=2;i<=MAX;i++) if(t->stu[i].namestu[i-1].name){ t->stu[0]=t->stu[i]; for(j=i-1;t->stu[0].namestu[j].name;j--) t->stu[j+1]=t->stu[j]; t->stu[j+1]=t->stu[0]; } } void select_sort(Student *t)//直接 按 C 成绩 { cout<<"直接选择排序按 C 成绩:"<stu[j]score1stu[k].score1)
k=j; if(i!=k){ t->stu[0]=t->stu[k]; t->stu[k]=t->stu[i]; t->stu[i]=t->stu[0]; } } } Binary_Search(Student *t,int score)// 二分 按 C { int low,high,mid; int flag; low=1; high=t->length; flag=0; while(low<=high) { mid=(low+high)/2; if(scorestu[mid].C_score) high=mid-1; else if(score>stu[mid].C_score) low=mid+1; else{ flag=mid; break; } } if(flag==score) { cout<<"学号"<<'\t'<<"姓名"<<'\t'<<"班级"<<'\t'<<"C++"<<'\t'<<"数据结构 "<stu[mid].name<<'\t'<stu[mid].number<<'\t'<stu[mid].Class<<'\t'< stu[mid].C_score<<'\t'<stu[mid].Data_score; } else cout<<"查无此人"<
} void Bubble_sort(Student *t) //冒泡 { cout<<"冒泡排序数据结构成绩:"<stu[j].score2>t->stu[j+1].score2){ t->stu[0]=t->stu[j]; t->stu[j]=t->stu[j+1]; t->stu[j+1]=t->stu[0]; swap=1; } if(swap==0) break; } } 3.Test #include"search.h" #include #include using namespace std; void main() { Student *t; t=new Student; t->length=0; S_Init(t,0,1,"王立",03511,85,76); S_Init(t,1,2,"张秋",03511,78,88); S_Init(t,2,3,"刘丽",03511,90,79); S_Init(t,3,4,"王通",03511,75,86); S_Init(t,4,5,"赵阳",03511,60,71); S_Init(t,5,6,"李艳",03511,58,68); S_Init(t,6,7,"钱娜",03511,95,89); S_Init(t,7,8,"孙胜",03511,45,60); cout<<"按姓名顺序查找:"<
S_Search(t,"赵阳"); S_Search(t,"王夏"); cout<<"按姓名直接插入排序:"<
按 C 成绩直接选择排序输出结果 按 C 成绩二分查找输出结果 四、实验总结 按数据结构成绩冒泡排序输出结果 需要被反复使用的许多操作,应该组装到一个函数中,方便调用,也可以减少 代码的长度,参数的类型应该注意,否则容易因为不匹配而发生错误。
分享到:
收藏