1.掌握查找的不同方法,并能用高级语言实现查找算法。
2.熟练掌握顺序表和有序表的顺序查找和二分查找方法。
3.掌握排序的不同方法,并能用高级语言实现排序算法。
4.熟练掌握顺序表的选择排序、冒泡排序和直接插入排序算法的实现。
二、实验内容
1.学生信息如下:
学号 姓名 数据结构 程序设计
1 王立 76 88
2 张秋 88 77
3 刘丽 79 65
4 王通 86 85
5 赵阳 71 90
6 李艳 68 70
7 钱娜 89 95
8 孙胜 60 76
2.创建顺序查找表,输入学生信息。
【选做:也可以将学生信息存入文件,直接从文件读取学生信息】
3.使用顺序查找方法按姓名查找学生。如果查找成功,则显示该生的相关信息;如果查找不成功,则给出相应的提示信息。
4.使用二分查找方法,查找学生学号信息。如果查找成功,则显示该生的相关信息;如果查找不成功,则给出相应的提示信息。
5.使用直接插入排序方法,对学生信息中的姓名进行排序。输出排序前和排序后的学生信息表,验证排序结果。
6.使用直接选择排序或冒泡排序方法,对学生信息中的数据结构成绩进行排序。输出排序前和排序后的学生信息表,验证排序结果。
7.使用快速排序方法,对学生信息中的程序设计成绩进行排序。输出排序前和排序后的学生信息表,验证排序结果。
8.编写一个菜单,来实现各项功能的选择。
*******************学生成绩管理系统*****************
* 1.信息初始化 2.顺序查找 *
* 3.二分查找 4.直接插入排序 *
* 5.冒泡或选择排序 6.快速排序 *
* 0.退出 *
****************************************************
9.利用工程完成本次实验任务,各个功能分别放到一个函数中。
三、实验结果
给出源程序及输入、输出结果。
解决方案:
#include#include #include #include using namespace std; #define MAXSIZE 100 typedef struct { int num; char name[20]; int score; int score2; }Student; typedef struct{ Student elem[MAXSIZE]; int last; }Sqlist; int InitList(Sqlist *L); void DirectInsertSort(Sqlist *L, int left, int right); void QuickSort(Sqlist *L, int low, int high); int BinSearch(Sqlist *L, int n, int k); int Locate(Sqlist *L, Student e); int BubbleSort(Sqlist *L, int n); void ShowList(Sqlist *L,int n); void ShowList2(Sqlist *L,int n); void menu(); int main() { int i,temp1,temp2,sum,select=1,bin=0; Sqlist L; Student m,e; while(select) { menu(); cout<<"请选择你要操作的选项:"; cin>>select; cout< >e.name; temp1=Locate(&L,e); ShowList2(&L,temp1); system("pause"); system("cls"); break; case 3: cout<<"请输入要查找的学生学号:"; cin>>bin; temp2=BinSearch(&L,sum,bin); ShowList2(&L,temp2); system("pause"); system("cls"); break; case 4: cout<<"姓名直接插入排序前:"< elem[i].num<<"t"< elem[i].name<<"t"< elem[i].score<<"tt"< elem[i].score2< >x; sum=x; for(int i=0; i >L->elem[i].num; cout<<"-----------------------------"< >L->elem[i].name; cout<<"-----------------------------"< >L->elem[i].score; cout<<"-----------------------------"< >L->elem[i].score2; cout<<"-----------------------------"< last=x; return sum; cout< last;i++)//比较函数 { if(strcmp(L->elem[i].name, e.name)==0) return i+1; } //return 0; } int BinSearch(Sqlist *L, int n, int k) { int low = 0, high =n-1,mid;//n-1 while(low<=high) { mid=(low+high)/2; if(k==L->elem[mid].num) return mid+1; if(k< L->elem[mid].num) high=mid-1; else low=mid+1; } return 0; } void DirectInsertSort(Sqlist *L, int left, int right) { Student t; for (int i = left; i <= right; ++i) { for (int j = i - 1; j >= 0 && strcmp(L->elem[j].name,L->elem[j+1].name)>0; --j) { t=L->elem[j]; L->elem[j]=L->elem[j+1]; L->elem[j+1]=t; } } } int BubbleSort(Sqlist *L, int n) { int i,j; Student t; for(i=0;i i;j--) { if(L->elem[j-1].score > L->elem[j].score) { t=L->elem[j-1]; L->elem[j-1]=L->elem[j]; L->elem[j]=t; } } } return 0; } void QuickSort(Sqlist *L, int low, int high) { int i=low,j=high; Student pivotvalue=L->elem[i]; if(low>=high) return; while(i elem[j].score2>=pivotvalue.score2) j--; L->elem[i]=L->elem[j]; while(i elem[i].score2<=pivotvalue.score2) i++; L->elem[j]=L->elem[i]; } L->elem[i]=pivotvalue; QuickSort(L,low,i-1); QuickSort(L,i+1,high); } void ShowList2(Sqlist *L,int n) { if(n!=0) { cout<<"学号t"<<"姓名t"<<"数据结构t"<<"程序设计t"< elem[n-1].num<<"t"< elem[n-1].name<<"t"< elem[n-1].score<<"tt"< elem[n-1].score2<



