100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 学生成绩管理系统利用数据结构顺序表来进行二分查找 直接插入 快速排序操作

学生成绩管理系统利用数据结构顺序表来进行二分查找 直接插入 快速排序操作

时间:2020-06-24 16:06:54

相关推荐

学生成绩管理系统利用数据结构顺序表来进行二分查找 直接插入 快速排序操作

一、实验目的

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<iostream>#include<string.h>#include<stdlib.h>#include<conio.h>using namespace std;#define MAXSIZE 100typedef 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<<endl;switch(select){case 1: //信息初始化sum=InitList(&L);system("pause");system("cls");break;case 2: //顺序查找cout<<"请输入你要查找的姓名"<<endl;cin>>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<<"姓名直接插入排序前:"<<endl;ShowList(&L,sum);cout<<"姓名直接插入排序后:"<<endl;DirectInsertSort(&L, 0, sum-1);ShowList(&L,sum);system("pause");system("cls");break;case 5:BubbleSort(&L,sum);ShowList(&L,sum);system("pause");system("cls");break;case 6:QuickSort(&L,0,sum-1);ShowList(&L,sum);system("pause");system("cls");break;case 0:exit(0);}}}void menu(){cout<<"*******************学生成绩管理系统*****************"<<endl;cout<<"* 1.信息初始化 2.顺序查找 *"<<endl;cout<<"* 3.二分查找4.直接插入排序*"<<endl;cout<<"* 5.冒泡或选择排序 6.快速排序 *"<<endl;cout<<"* 0.退出 *"<<endl;cout<<"****************************************************"<<endl;}void ShowList(Sqlist *L,int n){for(int i=0;i<n;i++){cout<<"学号\t"<<"姓名\t"<<"数据结构\t"<<"程序设计\t"<<endl;cout<<L->elem[i].num<<"\t"<<L->elem[i].name<<"\t"<<L->elem[i].score<<"\t\t"<<L->elem[i].score2<<endl;}}int InitList(Sqlist *L){int x=0,sum=0;cout<<"请输入学生的数量:"<<endl;cin>>x;sum=x;for(int i=0; i<x; i++){cout<<"第"<<i+1<<"位学生信息"<<endl;cout<<"学号:";cin>>L->elem[i].num;cout<<"-----------------------------"<<endl;cout<<"姓名:";cin>>L->elem[i].name;cout<<"-----------------------------"<<endl;cout<<"数据结构:";cin>>L->elem[i].score;cout<<"-----------------------------"<<endl;cout<<"程序设计:";cin>>L->elem[i].score2;cout<<"-----------------------------"<<endl;}L->last=x;return sum;cout<<endl;}int Locate(Sqlist *L, Student e){int i;for(i=0;i<L->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-1while(low<=high){mid=(low+high)/2;if(k==L->elem[mid].num)return mid+1;if(k< L->elem[mid].num)high=mid-1;elselow=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<n-1;i++){for(j=n-1;j>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<j){while(i<j&&L->elem[j].score2>=pivotvalue.score2)j--;L->elem[i]=L->elem[j];while(i<j&&L->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"<<endl;cout<<L->elem[n-1].num<<"\t"<<L->elem[n-1].name<<"\t"<<L->elem[n-1].score<<"\t\t"<<L->elem[n-1].score2<<endl;}elsecout<<"查找失败"<<endl;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。