队列的应用舞伴配对问题Word文档格式.doc
《队列的应用舞伴配对问题Word文档格式.doc》由会员分享,可在线阅读,更多相关《队列的应用舞伴配对问题Word文档格式.doc(5页珍藏版)》请在冰豆网上搜索。
依次从男队和女队的队头各出一人配成舞伴。
如果两队初始人数不等,则较长的那一队中未配对者等待下一轮舞曲。
b.假设初始男、女人数及性别已经固定,舞会的轮数从键盘输入。
试模拟解决上述舞伴配对问题。
要求:
从屏幕输出每一轮舞伴配对名单,如果在该轮有未配对的,能够从屏幕显示下一轮第一个出场的未配对者的姓名。
实验步骤:
#include<
stdio.h>
string.h>
stdlib.h>
typedefstructQNode
{
charname[10];
structQNode*next;
}QNode,*QueuePtr;
typedefstruct
QueuePtrfront;
QueuePtrrear;
}LinkQueue;
voidInitQueue(LinkQueue&
Q)
{//构建一个空队列
Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));
if(!
Q.front)
exit(0);
Q.front->
next=Q.front;
}//InitQueue
voidEnQueue(LinkQueue&
Q,char*str)
{//将字符串入队
QueuePtrp;
p=(QueuePtr)malloc(sizeof(QNode));
p)
strcpy(p->
name,str);
p->
next=NULL;
Q.rear->
next=p;
Q.rear=p;
}
voidDeQueue(LinkQueue&
{//将结点删除后连接到队列的后方
p=Q.front->
next;
strcpy(str,p->
name);
next=p->
if(Q.rear==p)
Q.rear=Q.front;
free(p);
voidGetHead(LinkQueueQ,char*str)
{//若队列非空,取队头元素
if(Q.front!
=Q.rear)
{
p=Q.front->
strcpy(str,p->
}
voidDancer(LinkQueue&
Q1,LinkQueue&
Q2)
{//实现配对,输出配对人名单,打印下一轮等待的人名
charstr[15],boy[15],girl[15],ch;
intb,g,i,k,ls,j;
printf("
请输入男舞伴的人数:
\n"
);
scanf("
%d"
&
b);
ch=getchar();
请输入男舞伴的名字:
for(i=0;
i<
b;
i++)
gets(str);
EnQueue(Q1,str);
printf("
请输入女舞伴的人数:
g);
请输入女舞伴的名字:
g;
EnQueue(Q2,str);
请输入舞会的轮数:
ls);
if(b<
g)
k=b;
else
k=g;
ls;
printf("
第%d轮数配对如下:
i+1);
for(j=0;
j<
k;
j++)
{
DeQueue(Q1,boy);
DeQueue(Q2,girl);
printf("
%s<
---->
%s\n"
boy,girl);
EnQueue(Q1,boy);
EnQueue(Q2,girl);
}
if(b<
GetHead(Q2,str);
%s在等待\n"
str);
else
GetHead(Q1,str);
printf("
voidmain()
LinkQueueQ1,Q2;
InitQueue(Q1);
InitQueue(Q2);
Dancer(Q1,Q2);
实验运行结果
教师批阅评语:
成绩评定
教师签名:
年月日
优秀
良好
中等
及格
不及格