数据结构课程设计奥运会奖牌管理程序文档格式.docx

上传人:b****6 文档编号:20555344 上传时间:2023-01-24 格式:DOCX 页数:22 大小:124.96KB
下载 相关 举报
数据结构课程设计奥运会奖牌管理程序文档格式.docx_第1页
第1页 / 共22页
数据结构课程设计奥运会奖牌管理程序文档格式.docx_第2页
第2页 / 共22页
数据结构课程设计奥运会奖牌管理程序文档格式.docx_第3页
第3页 / 共22页
数据结构课程设计奥运会奖牌管理程序文档格式.docx_第4页
第4页 / 共22页
数据结构课程设计奥运会奖牌管理程序文档格式.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

数据结构课程设计奥运会奖牌管理程序文档格式.docx

《数据结构课程设计奥运会奖牌管理程序文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计奥运会奖牌管理程序文档格式.docx(22页珍藏版)》请在冰豆网上搜索。

数据结构课程设计奥运会奖牌管理程序文档格式.docx

#include<

stdio.h>

stdlib.h>

string.h>

#defineOK1

#defineERROR0

#defineOVERFLOW-2

#defineEQ(a,b)((a)==(b))

#defineLT(a,b)((a)<

(b))

typedefintStatus;

typedefstructLNode1{/*存储国家、金牌数、奖牌数*/

structdata1{/*数据域*/

charcountry[50][50];

/*存储国家的二维数组*/

intgolden[50];

/*金牌数*/

intmedal[50];

/*奖牌数*/

}data1;

structLNode1*next;

}LNode1,*LinkList1;

StatusStorage_Sort_Search(LinkList1L1)/*输入存储(Storage),同时插入排序

{(Sort),查找(Search)*/

inti,j,n,k,m,z,l,low,high,mid;

intM[50];

/*将存储的金牌存入此数组*/

intN[50];

/*将存储的奖牌存入此数组*/

intG[50];

intH[50];

intQ[50];

intZ[50];

intF[50];

charW[50][50];

L1=(LNode1*)malloc(sizeof(LNode1));

L1->

next=NULL;

printf("

(1).存储(国家、金牌数、奖牌数)\n\n"

);

请输入要存储的国家个数n\n"

scanf("

%d"

&

n);

请依次输入%d个国家的名字\n"

n);

for(i=0;

i<

n;

i++)/*用一个循环,依次存储国家*/

%s"

L1->

data1.country[i]);

请依次输入%d个国家的金牌数\n"

i++)/*用一个循环,依次存储金牌数,同时将golden[0……n-1]中

{的数存入M[1……n]中*/

scanf("

(L1->

data1.golden[i]));

M[i+1]=L1->

data1.golden[i];

}

请依次输入%d个国家的奖牌数\n"

i++)/*用一个循环,依次存储奖牌数,同时将

{medal[0……n-1]中的数存入N[1……n]中*/

Q[i]);

while(Q[i]<

M[i+1])/*此部分为判断输入的奖牌值是否有错,若所输入的

{奖牌值小于对应国家的金牌数值,则需重新输入*/

您刚才输入的奖牌数小于金牌数!

!

请重新输入奖牌数值\n"

}

N[i+1]=L1->

data1.medal[i]=Q[i];

\n\n

(2).排序(金牌榜)\n\n"

/*直接插入排序*/

for(i=2;

=n;

++i)/*在数组M中按照插入排序从小到大排列金牌数*/

if(M[i]<

M[i-1])/*若<

则需要把M[i]插入到有序子表中*/

{

M[0]=M[i];

/*M[[i]中的值放到M[0]中作为监视哨*/

M[i]=M[i-1];

for(j=i-2;

M[0]<

M[j];

--j)/*除后两个外依次与监视哨比较,若<

M[j+1]=M[j];

则记录后移*/

M[j+1]=M[0];

/*插入到正确位置*/

\n\n下面是金牌排序显示:

\n\n"

for(i=1;

i++)

printf("

%d"

M[i]);

i++)/*给数组G,H全部赋值为50*/

G[i]=50;

H[i]=50;

}

\n\n\n金牌榜\n\n\n"

国家金牌奖牌\n\n"

for(i=n;

i>

=1;

i--)/*用两个for循环找到金牌数由多到少的国家在原来存储中for(j=0;

j<

j++)的位置,主要根据原来金牌的位置找国家和奖牌*/

if((G[j]!

=j)&

&

(M[i]==(L1->

data1.golden[j])))

{

\t%s\t%d\t%d\n"

data1.country[j],L1->

data1.golden[j],L1->

data1.medal[j]);

G[j]=j;

/*j值放于数组G中相应的位置,使j在

}下一次循环时不能等于以前找过的值*/

\n\n排序(奖牌榜)\n\n"

/*折半插入排序*/

++i)

N[0]=N[i];

/*放于N[0]中起监视作用*/

low=1;

high=i-1;

while(low<

=high)/*在N[low……high]中,折半查找有序插

{入位置*/

mid=(low+high)/2;

/*折半*/

if(LT(N[0],N[mid]))/*插入点在低半区*/

high=mid-1;

elselow=mid+1;

/*插入点在高半区*/

for(j=i-1;

j>

=high+1;

--j)/*记录后移*/

N[j+1]=N[j];

N[high+1]=N[0];

/*插入*/

\n\n下面是奖牌排序显示:

N[i]);

\n\n\n奖牌榜\n\n\n"

i--)/*用两个for循环找到奖牌数由多到少的国家在原来存储中

for(j=0;

j++)的位置,主要根据原来奖牌的位置找国家和金牌*/if((H[j]!

(N[i]==(L1->

data1.medal[j])))

{

printf("

H[j]=j;

/*j值放于数组H中相应的位置,使j在}下一次循环时不能等于以前找过的值*/

 

\n\n(3).查找(国家—>

金牌数)\n\n"

请输入要查找的国家个数k\n"

k);

while(k>

n)/*此部分为判断要查找的国家数目是否

{超出范围,若超出,需要重新输入*/

您要查找的国家个数大于存储个数,请重新输入\n"

scanf("

请依次输入这个%d国家的名字\n"

k);

k;

l=0;

W[i]);

j++)/*for循环依次在存储的n个国家中与W[i]中的字符串比if(!

strcmp(W[i],L1->

data1.country[j]))较,找到国家对应的位置*/

\n此国家的金牌数为%d,奖牌数为%d\n\n"

l=1;

}

while(l==0)/*若j循环一趟没有找到与W[i]相同的

{值,则运行while*/

\n没有查找到您要找的这个国家,请重新输入\n\n"

j++)

if(!

data1.country[j]))

{

/*给l赋值1,保证只要输错就一直进行}while循环*/

}

\n\n查找(金牌数—>

国家)\n\n"

/*有序数组M中二分法查找金牌的过printf("

请输入您要查找的次数\n"

程*/

scanf("

m);

请连续%d次输入金牌数\n"

m);

m;

{

F[i]);

high=n;

=high)

if(EQ(F[i],M[mid]))

{

for(j=0;

j++)

if(M[mid]==(L1->

data1.golden[j]))

/*由有序组中的金牌找到其在原来存储中的位置*/

\n此金牌数对应的国家为%s,奖牌数为%d\n\n"

l=1;

break;

/*若在M中找到了相应的金牌数,在输}出后要跳出if,不然为死循环*/

else

if(LT(F[i],M[mid]))

high=mid-1;

elselow=mid+1;

while(l==0)

\n没有找到该奖牌数所对应的国家,请重新输入\n\n"

low=1;

high=n;

while(low<

=high)

mid=(low+high)/2;

if(EQ(F[i],M[mid]))

for(j=0;

if(M[mid]==(L1->

l=1;

break;

else

if(LT(F[i],M[mid]))

high=mid-1;

elselow=mid+1;

\n\n查找(奖牌—>

/*直接查找过程*/

z);

请连续%d次输入奖牌数\n"

z);

z;

Z[i]);

j++)/*for循环依次在存储的n个奖牌值中与Z[i]中的

if(Z[i]==L1->

data1.medal[j])数值比较,找到奖牌对应的位置*/

\n此奖牌数对应的国家为%s,金牌数为%d\n\n"

data1.golden[j]);

\n没有存储你输入的奖牌数,请重新输入\n\n"

data1.medal[j])

}

typedefstructLNode2{/*存储获得金牌的运动员姓名、国籍、获奖时间*/

structdata2{/*数据域*/

charathlete[50][50];

/*存储运动员的二维数组*/

/*存储国籍的二维数组*/

chartime[50][50];

/*存储时间的二维数组*/

charproject[50][50];

/*存储项目的二维数组*/

}data2;

structLNode2*next;

}LNode2,*LinkList2;

StatusStorage_Search(LinkList2L2)/*存储(Storage),查找(Search)*/

{

inti,j,m,k,l;

charF[50][50];

charG[50][50];

charH[50][50];

charK[50][50];

L2=(LNode2*)malloc(sizeof(LNode2));

L2->

\n\n

(1).存储(获金牌的运动员及其国籍、获奖时间、所参加的项目)\n\n"

请输入要存储的获金牌的运动员的人数m\n"

请依次输入这%d个运动员的姓名\n"

i++)/*用一个循环,依次输入获金牌的运动员的姓名*/

L2->

data2.athlete[i]);

请依次输入这%d个运动员的国籍\n"

i++)/*用一个循环,依次输入获金牌的运动员的国籍*/

data2.country[i]);

请依次输入这%d个运动员的获奖时间\n"

i++)/*用一个循环,依次输入获金牌的运动员的获奖时间*/

data2.time[i]);

请依次输入这%d个运动员所参加的项目\n"

i++)/*用一个循环,依次输入获金牌的运动员的项目名称*/

data2.project[i]);

\n\n

(2).查找(运动员—>

项目+国籍+时间)\n\n"

请输入你要查找的运动员的人数k\n"

F[i]);

j++)/*for循环依次在存储的m个运动员中与F[i]中的字符串

strcmp(F[i],L2->

data2.athlete[j]))比较,找到对应的位置*/

\n这名运动员国籍是%s,获金牌时间是%s,所参加的项目是%s\n\n"

data2.country[j],L2->

data2.time[j],L2->

data2.project[j]);

\n没有查找到您要找的这个运动员,请重新输入\n\n"

data2.athlete[j]))

\n这名运动员国籍是%s,获金牌时间是%s,所参加项目是%s\n\n"

}

\n\n查找(国家—>

获金牌运动员+时间+项目)\n\n"

请连续%d次输入国家的名字\n"

l=0;

G[i]);

j++)/*for循环依次在存储的m个国家中与G[i]中的字符串

strcmp(G[i],L2->

data2.country[j]))比较,找到对应的位置*/

\n此国家获得金牌的运动员有%s,所参加的项目间是%s\n\n"

data2.athlete[j],L2->

data2.project[j],L2->

data2.time[j]);

\n没有存储您要查找的国家,请重新输入\n\n"

data2.country[j]))

{printf("

\n此国家获得金牌的运动员有%s,所参加的项目是%s,获奖时间是%s\n\n"

\n\n查找(时间—>

获金牌的运动员+国籍+项目)\n\n"

请连续%d次输入获奖时间\n"

H[i]);

j++)/*for循环依次在存储的m个时间中与H[i]中的字符串

strcmp(H[i],L2->

data2.time[j]))比较,找到时间对应的位置*/

\n这天获金牌的运动员有%s,国籍为%s,所参加的项目是%s\n\n"

\n没有存储您输入的时间,请重新输入\n\n"

data2.time[j]))

\n这天获金牌的运动员有%s,国籍为%s,所参加的项目%s\n\n"

\n\n查找(项目—>

获金牌的运动员+国籍+时间)\n\n"

请连续%d次输入项目名称\n"

l=0;

K[i]);

j++)/*for循环依次在存储的m个项目中与K[i]中的字符串比

strcmp(K[i],L2-

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

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

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

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