数据结构试验查找排序.docx
- 文档编号:6718319
- 上传时间:2023-05-10
- 格式:DOCX
- 页数:15
- 大小:128.54KB
数据结构试验查找排序.docx
《数据结构试验查找排序.docx》由会员分享,可在线阅读,更多相关《数据结构试验查找排序.docx(15页珍藏版)》请在冰点文库上搜索。
数据结构试验查找排序
实验七查找、排序的应用
一、实验目的
1、本实验可以使学生更进一步巩固各种查找和排序的基本知识。
2、学会比较各种排序与查找算法的优劣。
3、学会针对所给问题选用最适合的算法。
4、掌握利用常用的排序与选择算法的思想来解决一般问题的方法和技巧。
二、实验内容
[问题描述]
对学生的基本信息进行管理。
[基本要求]
设计一个学生信息管理系统,学生对象至少要包含:
学号、姓名、性别、成绩1、成绩2、总成绩等信息。
要求实现以下功能:
1.总成绩要求自动计算;
2.查询:
分别给定学生学号、姓名、性别,能够查找到学生的基本信息(要求至少用两种查找算法实现);
3.排序:
分别按学生的学号、成绩1、成绩2、总成绩进行排序(要求至少用两种排序算法实现)。
[测试数据]
由学生依据软件工程的测试技术自己确定。
三、实验前的准备工作
1、掌握哈希表的定义,哈希函数的构造方法。
2、掌握一些常用的查找方法。
1、掌握几种常用的排序方法。
2、掌握直接排序方法。
四、实验报告要求
1、实验报告要按照实验报告格式规范书写。
2、实验上要写出多批测试数据的运行结果。
3、结合运行结果,对程序进行分析。
一、需求分析
设计一个学生信息管理系统,学生对象包含:
学号、姓名、性别、班级、成绩1、成绩2、总成绩,要求实现以下功能:
1.总成绩要求自动计算;
2.查询:
分别给定学生学号、姓名、性别,能够查找到学生的基本信息
3.排序:
分别按学生的学号、成绩1、成绩2、总成绩进行排序
二、概要设计
typedefstruct
{
floatnum;//学生学号
stringname;//学生姓名
stringsex;//性别
charclassName[20];//班级名称
floatmark1;//第1门成绩
floatmark2;//第2门成绩
floatsum;//第3门成绩
}DataType;
typedefstruct//定义顺序表的结构
{
DataTyper[MAXSIZE+1];//存储顺序表的向量
intlength;//顺序表的长度
}SqList;
intmenu()菜单函数
voidCreatList(SqList&ST)//创建学生的相关信息
voidsort(SqList&ST)//排序
voidQuery(SqList&ST)//查询信息
voidmain()
三、详细设计
#include
#include
#include
usingnamespacestd;
#defineMAXSIZE100
typedefstruct
{
floatnum;//学生学号
stringname;//学生姓名
stringsex;//性别
charclassName[20];//班级名称
floatmark1;//第1门成绩
floatmark2;//第2门成绩
floatsum;//第3门成绩
}DataType;
typedefstruct//定义顺序表的结构
{
DataTyper[MAXSIZE+1];//存储顺序表的向量
intlength;//顺序表的长度
}SqList;
intmenu()
{
inti;
cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"< cout<<"学生信息管理系统清单\n"< cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"< cout<<"1.成绩的输入"< cout<<"2.成绩查询"< cout<<"3.成绩排序"< cout<<"4.退出"< cout<<"请选择1-4: "< cin>>i; while(i<0||i>4) { cout<<"系统提示: 您输入错误! "< cout<<"请重新输入1-4: "< cin>>i; } returni; } voidCreatList(SqList&ST)//创建学生的相关信息 { cout<<"输入学生个数"< cin>>ST.length; cout<<"学号姓名性别班级成绩1成绩2"< for(inti=0;i { cout<<"输入第"< cin>>ST.r[i].num>>ST.r[i].name>>ST.r[i].sex>>ST.r[i].className>>ST.r[i].mark1>>ST.r[i].mark2; } cout<<"输入完毕"< } voidoutput(SqList&ST)//输出 { cout<<"学生的信息如下"< cout<<"学号姓名性别班级成绩1成绩2总分"< for(inti=0;i cout< } voidQuery(SqList&ST)//查询信息 { cout< cout<<" (1)根据学号查询"< cout<<" (2)根据姓名查询"< cout<<"(3)根据性别查询"< cout<<"(4)退出"< inta,m,n,i,j; intlow,high,mid; DataTypeLI;//使学号变为有序 stringname; stringxb; cin>>m; switch(m) { case1: //折半查找 for(i=1;i { for(j=i;j>=1;j--) if(ST.r[j].num { LI=ST.r[j]; ST.r[j]=ST.r[j-1]; ST.r[j-1]=LI; } } a=0; cout<<"输入要查找的学号"< cin>>n; low=0;high=ST.length-1;//置区间初值 while(low<=high) { mid=(low+high)/2; if(n==ST.r[mid].num) { cout< a=1; break; } elseif(n high=mid-1;//继续在前半区间进行查找 else low=mid+1;//继续在后半区间进行查找 } if(! a) { cout<<"所查信息不存在! "< cout<<"请重新输入"< } break; case2: //顺序查找 { a=0; cout<<"输入要查找的姓名"< cin>>name; for(i=0;i { if(name==ST.r[i].name) { cout< a=1; } } if(! a) { cout<<"所查信息不存在! "< cout<<"请重新输入"< } break; } case3: //顺序查找 { a=0; cout<<"输入要查找性别"< cin>>xb; for(i=0;i { if(xb==ST.r[i].sex) { cout< a=1; } } if(! a) { cout<<"所查信息不存在! "< cout<<"请重新输入"< } break; } case4: menu(); break; } } voidsort(SqList&ST)//排序 { intn,i,j; DataTypeLI;//定义存储学号向量 cout< cout<<" (1)根据学号排序"< cout<<" (2)根据成绩1排序"< cout<<"(3)根据成绩2排序"< cout<<"(4)根据总成绩排序"< cout<<"(5)退出"< cin>>n; switch(n) { case1: //按学号排序,使用插入排序 for(i=1;i for(j=i;j>=1;j--) if(ST.r[j].num { LI=ST.r[j]; ST.r[j]=ST.r[j-1]; ST.r[j-1]=LI; } output(ST); cout<<"排序完毕"< break; case2: //按成绩1排序,用选择排序 for(i=0;i { for(j=i+1;j { if(ST.r[i].mark1>ST.r[j].mark1) { LI=ST.r[j]; ST.r[j]=ST.r[i]; ST.r[i]=LI; } } } output(ST); cout<<"排序完毕"< break; case3: //根据成绩2排序,使用选择法排 for(i=0;i { for(j=i+1;j { if(ST.r[i].mark2>ST.r[j].mark2) { LI=ST.r[j]; ST.r[j]=ST.r[i]; ST.r[i]=LI; } } output(ST); cout<<"排序完毕"< break; case4: //根据总成绩排序,使用选择法排序 for(i=0;i { for(j=i+1;j { if(ST.r[i].sum>ST.r[j].sum) { LI=ST.r[j]; ST.r[j]=ST.r[i]; ST.r[i]=LI; } } } output(ST); cout<<"排序完毕"< break; case5: //退出 menu(); break; } } } #include"查找排序.h" voidmain() { SqListST; while (1) { switch(menu()) { case1: cout< cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"< cout<<"1.成绩的输入"< cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"< CreatList(ST); break; case2: cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"< cout<<"2.成绩的查询"< cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"< Query(ST); break; case3: cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"< cout<<"3.成绩的排序"< cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"< sort(ST); break; case4: cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"< cout<<"4.退出"< cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"< exit(0); break; } } } 四、运行结果 图表1 图表2 图表3 图表4 图表5 图表6 图表7 图表8 五、心得体会 整个程序前前后后整整用了一个星期,每天只要有空闲时间就在翻书本,画流程图,写代码,反反复复一点一点。 一个星期的编写让我进步不少,心得也不少,但是说实话让我认识最深的是四点,刻骨铭心: 1.对于编程来说看书很重要,但实实在在的动手去编才是王道! 2.任何程序想要写起来不被自己搞晕,就一定要画图,省时省事! 3.编程一定养成良好的编程习惯,无论命名还是结构! 4.任何程序算法是灵魂,程序的好坏很大部分取决于算法,只是一组数的排序差别就如此之大,跟别说一个比排序复杂多倍的排序!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 试验 查找 排序