IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 学生成绩管理系统利用数据结构顺序表来进行二分查找,直接插入,快速排序操作 -> 正文阅读

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

作者:recommend-item-box type_blog clearfix

一、实验目的

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 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<<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-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<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;
			}
			else
				cout<<"查找失败"<<endl;
}



  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-06-14 22:53:04  更:2022-06-14 22:55:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 1:43:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码