数据结构 实验五 查找排序

一、实验内容:

设计一个学生信息管理系统,学生对象至少要包含:学号、姓名、成绩等信息。要求实现以下功能:
1、查找:分别给定学生学号、姓名,能够查找到学生的基本信息(要求至少实现改进后的顺序查找算法);
2、排序:分别按学生的学号、成绩进行排序(要求至少用实现直接插入排序冒泡排序简单选择排序算法)。

二、实验代码:

//list.h头文件

#include<iostream>
#include<string>
using namespace std;
//202056228杨丽花
struct student
{
	int num;  //学号
	char name[20];   //姓名
	char banji[20];    //班级
	int c;            //C语言课程成绩
	int datastruct;     //数据结构课程成绩
};
struct queue
{
	struct student a[8];
	int lenth;
};
class list
{
private:
	queue d;
public:
	int seqsearch(list, char*);
	void insertsort(list);
	void selectsort(list);
	void bubblesort(list);
	list();
	void display(list);
	void show(int);
};

//list.cpp源文件

#include "list.h"
//202056228杨丽花
list::list()
{
	struct student e[8] = {
		{1,"王一","2020562",85,76},
		{2,"王二","2020562",78,77},
		{3,"王三","2020562",90,79},
		{4,"王四","2020562",75,86},
		{5,"王五","2020562",60,71},
		{6,"王六","2020562",58,68},
		{7,"王七","2020562",95,89},
		{8,"王八","2020562",45,60},
	};
	for (int i = 0;i < 8;i++)
		d.a[i] = e[i];
}
void list::show(int i)
{
	if (i == -1)
		cout << "sorry not found!!" << endl;
	else
	{
		cout << "学号" <<"姓名" << "班级" << "c++"  << "数据结构\n";
		cout << "" << d.a[i].num << "   ";
		cout << d.a[i].name << "   ";
		cout << d.a[i].banji << "   ";
		cout << d.a[i].datastruct << "   ";
		cout << d.a[i].c << endl;
	}
}
void list::display(list l)
{
	cout << "学号" <<"     "<< "姓名" << "       " << "班级" <<"         "<< "c++" << "     " << "数据结构\n";
	for (int i = 0;i < 8;i++)
	{
		cout << "" << l.d.a[i].num << "       ";
		cout << l.d.a[i].name << "       ";
		cout << l.d.a[i].banji << "        ";
		cout << l.d.a[i].datastruct << "       ";
		cout << l.d.a[i].c << endl;
	}
}
int list::seqsearch(list l, char name[20])//顺序查找
{
	for (int i = 0;i < 8;i++)
		if (strcmp(l.d.a[i].name, name) == 0)
			return i;
	return -1;
}
void list::insertsort(list l)//直接插入排序
{
	struct student n;
	for (int i = 1;i < 8;i++)
	{
		n = l.d.a[i];
		int j = i - 1;
		while (j >= 0 && strcmp(n.name, l.d.a[j].name) < 0)
		{
			l.d.a[j + 1] = l.d.a[j];
			j--;
		}
		l.d.a[j + 1] = n;
	}
	display(l);
}
void list::selectsort(list l)//简单选择排序
{
	for (int i = 0;i < 7;i++)
	{
		int j = i;
		for (int k = j;k < 8;k++)
		{
			if (l.d.a[j].c < l.d.a[k + 1].c)
				j = k + 1;
		}
		if (j != i)
		{
			student s = l.d.a[i];
			l.d.a[i] = l.d.a[j];
			l.d.a[j] = s;
		}
	}
	display(l);
}
void list::bubblesort(list l)//冒泡排序
{
	for (int i = 7;i > 0;i--)
		for (int j = 0;j < i;j++)
		{
			if (l.d.a[j].datastruct > l.d.a[j + 1].datastruct)
			{
				student d = l.d.a[j];
				l.d.a[j] = l.d.a[i + 1];
				l.d.a[j + 1] = d;
			}
		}
	display(l);
}


//main.cpp文件

// 实验五.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include "list.h"
#include<string>
#include<cstring>
#pragma warning(disable:4996)
using namespace std;
using std::strcpy;
//202056228杨丽花
int main()
{
	list l;
	cout << "顺序查找姓名为王七的学生\n";
	char* temp = new char[10]; 
	const char* sb = "王七";
	strcpy( temp,sb);
	int i = l.seqsearch(l,temp);
	l.show(i);
	cout << endl;
	cout << "直接插入排序对姓名进行排序:\n";
	cout << "排序前的结果:\n";


	l.display(l);
	cout << "排序后的结果:\n";
	l.insertsort(l);
	cout << endl;
	cout << "简单选择排序对c语言成绩进行排序:\n";
	cout << "排序前的结果:\n";
	l.display(l);
	cout << "排序后的结果:\n";
	l.selectsort(l);
	cout << endl;
	cout << "冒泡排序对数据结构成绩进行排序:\n";
	cout << "排序前的结果:\n";
	l.display(l);
	cout << "排序后的结果:\n";
	l.bubblesort(l);
	cout << endl;

}

// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单

// 入门使用技巧: 
//   1. 使用解决方案资源管理器窗口添加/管理文件
//   2. 使用团队资源管理器窗口连接到源代码管理
//   3. 使用输出窗口查看生成输出和其他消息
//   4. 使用错误列表窗口查看错误
//   5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目
//   6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件

三、运行结果:

在这里插入图片描述

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

华不在意

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值