实验七八 查找排序应用问题实现.docx

上传人:b****6 文档编号:2945241 上传时间:2022-11-16 格式:DOCX 页数:10 大小:304.71KB
下载 相关 举报
实验七八 查找排序应用问题实现.docx_第1页
第1页 / 共10页
实验七八 查找排序应用问题实现.docx_第2页
第2页 / 共10页
实验七八 查找排序应用问题实现.docx_第3页
第3页 / 共10页
实验七八 查找排序应用问题实现.docx_第4页
第4页 / 共10页
实验七八 查找排序应用问题实现.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

实验七八 查找排序应用问题实现.docx

《实验七八 查找排序应用问题实现.docx》由会员分享,可在线阅读,更多相关《实验七八 查找排序应用问题实现.docx(10页珍藏版)》请在冰豆网上搜索。

实验七八 查找排序应用问题实现.docx

实验七八查找排序应用问题实现

实验七、八查找排序应用问题实现

一、实验目的

1.理解掌握动态查找表在计算机中的各种实现方法。

2.熟练掌握顺序查找、折半查找在顺序表上的实现及解决简单的应用问题。

3.熟练掌握常用排序算法在顺序表上的实现,能解决简单的应用问题。

二、实验内容

题目1:

从键盘上输入n个学生的基本信息(学号、姓名、班级、年龄等),建立其顺存储结构,然后执行如下操作:

1、分别按学号、姓名、班级、年龄进行插入排序、交换排序和选择排序并显示排序结果(排序算法任选,但必须保证每种算法至少使用一次);

2、可按学号、姓名、班级或其组合查找某一学生,若查找成功,则输出其基本信息,否则提示出错。

三、实验步骤

㈠、数据结构与核心算法的设计描述

#include

#include

#include

#defineMAXSIZE20

typedefstruct//学生结构体的定义

{

intnum;//学号

charname[10];//姓名

charcla[20];//班级

intage;//年龄

}Student;

typedefstructSqList//顺序表结构体的定义

{

StudentStu[MAXSIZE+1];//定义一个存放学生信息的数组

}SqList;

//直接插入排序(班级优先)

voidInsertsort(SqList&L))

{

inti,j;

for(i=2;i<=n;++i)

if(strcmp(L.Stu[i].cla,L.Stu[i-1].cla)<0)

{

L.Stu[0]=L.Stu[i];

for(j=i-1;strcmp(L.Stu[0].cla,L.Stu[j].cla)<0;--j)

L.Stu[j+1]=L.Stu[j];

L.Stu[j+1]=L.Stu[0];

}

}

//选择排序(姓名优先)

voidSelectsort(SqList&L)

{

Studentt;

inti,j,k;

for(i=1;i<=n;i++)

{

k=i;

for(j=i+1;j<=n;j++)

if(strcmp(L.Stu[j].name,L.Stu[k].name)<0)

k=j;

if(k!

=i)

{

t=L.Stu[i];

L.Stu[i]=L.Stu[k];

L.Stu[k]=t;

}

}

}

//快速排序

voidQuicksort(SqListL,intlow,inthigh)

{

intlocation;

if(low

{

location=Partition(L,low,high);

Quicksort(L,low,location-1);//对左区间递归排序

Quicksort(L,location+1,high);//对右区间递归排序

}

}

//查找学生信息

voidfind(SqList&L,intn)

{

intt,m=1;

cout<<"请输入你要查找的学号:

"<

cin>>t;

cout<<"该学生的信息为:

"<

while(m<=n&&L.Stu[m].num!

=t)

m++;

if(L.Stu[m].num==t)

cout<<"学号是:

"<

"<

"<

"<

else

cout<<"没有你要查找的学生!

"<

}

㈡、程序调试及运行结果分析

4、实验总结

通过这次实验我理解掌握基本查找算法、排序算法的特点及在计算机中的实现方法。

在实验过程中,我运用所学的知识解决简单的应用问题,通过不断的修改程序来完善自己的不足之处。

只有这样,才能更快的进步。

5、程序清单

#include

#include

#include

#defineMAXSIZE20

intn;

typedefstruct//学生结构体的定义

{

intnum;//学号

charname[10];//姓名

charcla[20];//班级

intage;//年龄

}Student;

typedefstructSqList//顺序表结构体的定义

{

StudentStu[MAXSIZE+1];//定义一个存放学生信息的数组

}SqList;

voidCreatInfo(SqList&L)

{

cout<<"请输入你要创建的学生数:

"<

cin>>n;

cout<<"学生的信息:

"<

cout<<"姓名学号年龄班级:

"<

for(inti=1;i<=n;i++)

{

cin>>L.Stu[i].name>>L.Stu[i].num>>L.Stu[i].age>>L.Stu[i].cla;

}

}

voidprint(SqList&L)//输出顺序表

{

cout<<"输出学生信息:

"<

for(inti=1;i<=n;++i)

{

cout<

}

}

voidInsertsort(SqList&L)//直接插入排序(班级优先)

{

inti,j;

for(i=2;i<=n;++i)

if(strcmp(L.Stu[i].cla,L.Stu[i-1].cla)<0)

{

L.Stu[0]=L.Stu[i];

for(j=i-1;strcmp(L.Stu[0].cla,L.Stu[j].cla)<0;--j)

L.Stu[j+1]=L.Stu[j];

L.Stu[j+1]=L.Stu[0];

}

}

intPartition(SqList&L,inti,intj)//快速排序

{

Studentp;

L.Stu[0]=L.Stu[i];

p=L.Stu[i];

while(i

{

while(i=p.num)

j--;

L.Stu[i]=L.Stu[j];

while(i

i++;

L.Stu[j]=L.Stu[i];

}

L.Stu[i]=p;

returni;

}

voidQuicksort(SqListL,intlow,inthigh)//快速排序

{

intlocation;

if(low

{

location=Partition(L,low,high);

Quicksort(L,low,location-1);//对左区间递归排序

Quicksort(L,location+1,high);//对右区间递归排序

}

}

voidSelectsort(SqList&L)//选择排序(姓名优先)

{

Studentt;

inti,j,k;

for(i=1;i<=n;i++)

{

k=i;

for(j=i+1;j<=n;j++)

if(strcmp(L.Stu[j].name,L.Stu[k].name)<0)

k=j;

if(k!

=i)

{

t=L.Stu[i];

L.Stu[i]=L.Stu[k];

L.Stu[k]=t;

}

}

}

voidfind(SqList&L,intn)//查找学生信息

{

intt,m=1;

cout<<"请输入你要查找的学号:

"<

cin>>t;

cout<<"该学生的信息为:

"<

while(m<=n&&L.Stu[m].num!

=t)

m++;

if(L.Stu[m].num==t)

cout<<"学号是:

"<

"<

"<

"<

else

cout<<"没有你要查找的学生!

"<

}

intmain()

{

SqListL;

intk;

CreatInfo(L);//创建学生信息

print(L);//按输入顺序打印出顺序表

loop:

cout<<"请选择排序方式:

"<

cout<<"1插入排序(班级优先)"<

cout<<"2选择排序(姓名优先)"<

cout<<"3快速排序"<

cout<<"4按学号查找学生"<

cout<<"0退出排序程序"<

cin>>k;

if(k!

=0)

{

switch(k)

{

case1:

Insertsort(L);//进行插入排序

print(L);break;//输出插入排序后的顺序表

case2:

Selectsort(L);//进行选择排序

print(L);break;//输出排序后的顺序表

case3:

Quicksort(L,1,n);//选择快速排序

print(L);break;//输出排序后的顺序表

case4:

find(L,n);break;//查找学生信息

default:

cout<<"输入错误!

"<

}

}

cout<

gotoloop;

return0;

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 调查报告

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1