综合实验七跳舞搭配问题.docx
- 文档编号:6194256
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:9
- 大小:16.21KB
综合实验七跳舞搭配问题.docx
《综合实验七跳舞搭配问题.docx》由会员分享,可在线阅读,更多相关《综合实验七跳舞搭配问题.docx(9页珍藏版)》请在冰豆网上搜索。
综合实验七跳舞搭配问题
综合实验七跳舞搭配问题
一、实验名称
跳舞搭配问题
二、实验目的
1、熟悉并掌握队列的顺序存储和链式存储结构
2、熟悉并掌握队列的基本操作
3、掌握队列实现跳舞搭配问题
三、实验内容及要求:
1、实验内容
问题描述:
一班有m个女生,有n个男生(m不等于n),现要开一个舞会,男女生分别编号坐在舞池的两边的椅子上.每曲开始时,依次从男生和女生中各出一人配对跳舞,本曲没成功配对者坐着等待下一曲找舞伴。
设计一系统模拟动态地显示出上述过程,要求如下:
1)输出每曲配对情况
2)计算出任何一个男生(编号为X)和任意女生(编号为Y),在第K曲配对跳舞的情况.至少求出K的两个值。
根据以上问题给出的以下存储结构定义:
//定义链队结点类型
typedefstructQNode
{
intnum;
structQNode*next;
}QNode,*QueuePtr;
//定义链队头指针类型
typedefstruct
{
QueuePtrfront;//队头指针
QueuePtrrear;//队尾指针
}LinkQueue;
――――――――――定义基本操作的函数说明―――――――――――――
voidsleep(clock_twait);/*延迟函数*/
voidInitQ(LinkQueue&Q)/*建立空队列*/
voidEnQueue(LinkQueue&Q,intnum)/*入队列*/
voidDeQueue(LinkQueue&Q,int&num)/*出队列*/
voidDestroyQueue(LinkQueue&Q)/*删除队列*/
voidprintF(LinkQueue&F,inti)
/*打印第i首曲子时女队的情况*/
voidprintM(LinkQueue&M,inti)
/*打印第i首曲子时男队的情况*/
voidcheck(intn)
/*判断输入n是否合法*/
2、实验要求
(1)、用C语言编程实现上述实验内容中的结构定义和算法。
(2)、要有main()函数,并且在main()函数中使用检测数据调用上述算法。
(3)、实验完成后撰写实验报告,实验报告的具体格式参见《实验报告须知》。
(4)、实验完成后把打印好的实验报告以及电子版的实验报告和源程序一并上交。
四、参考源代码:
#include
#include
#include
voidcheck(intn);
//定义链队结点类型
typedefstructQNode
{
intnum;
structQNode*next;
}QNode,*QueuePtr;
//定义链队头指针类型
typedefstruct
{
QueuePtrfront;//队头指针
QueuePtrrear;//队尾指针
}LinkQueue;
voidsleep(clock_twait)/*延迟函数*/
{
clock_tgoal;
goal=wait+clock();
while(goal>clock());
}
voidInitQ(LinkQueue&Q)
/*建立空队列*/
{
QueuePtrp;
p=(QueuePtr)malloc(sizeof(QNode));
if(p==NULL)
exit(-1);
Q.front=p;
Q.rear=p;
Q.front->next=NULL;
}
voidEnQueue(LinkQueue&Q,intnum)
/*入队列*/
{
QueuePtrp;
p=(QueuePtr)malloc(sizeof(QNode));
if(p==NULL)
exit(-1);
p->num=num;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
}
voidDeQueue(LinkQueue&Q,int&num)
/*出队列*/
{
QueuePtrp;
if(Q.front==Q.rear)
{
printf("队列为空");
return;
}
p=Q.front->next;
num=p->num;
Q.front->next=p->next;
if(!
p->next)
Q.rear=Q.front;
free(p);
}
voidDestroyQueue(LinkQueue&Q)
//删除队列
{
while(Q.front)
{
Q.rear=Q.front->next;
free(Q.front);
Q.front=Q.rear;
}
}
voidprintF(LinkQueue&F,inti)
/*打印第i首曲子时女队的情况*/
{
QueuePtrp;
intn=1;
while(n
{
printf("_");
n++;
}
p=F.front->next;
while(F.rear!
=p){
printf("%d",p->num);
p=p->next;}
printf("%d\n",p->num);
}
voidprintM(LinkQueue&M,inti)
/*打印第i首曲子时男队的情况*/
{
QueuePtrp;
intn=1;
while(n
{
printf("_");
n++;
}
p=M.front->next;
while(M.rear!
=p){
printf("%d",p->num);
p=p->next;}
printf("%d\n",p->num);
}
voidmain()//主函数
{
intm,n,k,i,num;
QueuePtrp,q;
LinkQueueF;/*女生队*/
LinkQueueM;/*男生队*/
printf("请输入女生数量:
");
scanf("%d",&m);
check(m);
printf("请输入男生数量:
");
scanf("%d",&n);
check(n);
printf("请输曲子号:
");
scanf("%d",&k);
check(k);
InitQ(F);
InitQ(M);
for(i=1;i<=m;i++)
{
EnQueue(F,i);
}
for(i=1;i<=n;i++)
{
EnQueue(M,i);
}
for(i=1;i<=k;i++)
{
system("CLS");
printf("第%d首曲子\n",i);
printF(F,i);
printM(M,i);
p=F.front->next;
q=M.front->next;
printf("k11111:
目前跳舞的是第%d号女生和第%d号男生\n",p->num,q->num);//k的第一个值
sleep(1000);
DeQueue(F,num);
EnQueue(F,num);
DeQueue(M,num);
EnQueue(M,num);
}
InitQ(F);
InitQ(M);
for(i=1;i<=m;i++)
{
EnQueue(F,i);
}
for(i=1;i<=n;i++)
{
EnQueue(M,i);
}
for(i=1;i<=k;i++)
{
system("CLS");
printf("第%d首曲子\n",i);
printF(F,i);
printM(M,i);
p=F.front->next;
q=M.front->next;
if(p->num+1<=m)//把上次女生配对的人往后错一个
printf("k22222:
目前跳舞的是第%d号女生和第%d号男生\n",p->num+1,q->num);//k的第二个值
else//如果是最后一个女生,就错到第一个
printf("k22222:
目前跳舞的是第%d号女生和第%d号男生\n",p->num-m+1,q->num);
sleep(1000);
DeQueue(F,num);
EnQueue(F,num);
DeQueue(M,num);
EnQueue(M,num);
}
sleep(1000);
DestroyQueue(F);
DestroyQueue(M);
}
voidcheck(intn)
/*判断输入n是否合法*/
{
if(n<0)
{
printf("Errorinput!
");
exit(0);
}
}
五、运行测试(略)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 综合实验七 跳舞搭配问题 综合 实验 跳舞 搭配 问题