如何用c语言解决舞伴问题

 我来答
帅得有点坏
2011-03-17 · TA获得超过1149个赞
知道小有建树答主
回答量:463
采纳率:0%
帮助的人:481万
展开全部
结构数组dancer中存放跳舞的男女,num是跳舞的人数。//男士队列初始化//女士队列初始化//依次将跳舞者依其性别入队//依次输入男女舞伴名//输出女士剩余人数及队头女士的名字//输出男队剩余人数及队头者名字

#include<stdio.h>//舞伴配对问题(用循环队列实现)//
#define queuesize 100
typedef struct //定义结构体-人员信息//
{
char name[20];
char sex;
} datatype;
typedef struct //定义结构体-循环队列//
{
int front;
int rear;
int count;
datatype dancers[queuesize];
} cirqueue;
void initqueue(cirqueue *q)//建立空队列//
{
q->front=q->rear=NULL;
q->count=0;
}
int queueempty(cirqueue *q)//判断队列是否为空,为空返回1,否则返回0//
{
return q->count==NULL;
}
void enqueue(cirqueue *q,datatype p)//进队函数,使p进入队列//
{
q->count++;
q->dancers[q->rear]=p;
q->rear=(q->rear+1)%queuesize;
}
datatype dequeue(cirqueue *q)//出队函数,用p返回出队值//
{
datatype p;
while(!queueempty(q))
{
p=q->dancers[q->front];
q->count--;
q->front=(q->front++)%queuesize;
return p;
}
}
datatype queuefront(cirqueue *q)//访问队头元素//
{
return q->dancers[q->front];
}
void dancepartners(datatype dancers[],int num)//舞伴配对函数//
{
int i;
datatype p;
cirqueue maledancer,femaledancer;//定义两个循环队列结构体//
initqueue(&maledancer);//调用initqueue()函数置空队列maledancer//
initqueue(&femaledancer);//调用initqueue()函数置空队列femaledancer//
for(i=0;i<num;i++)
{
p=dancers[i];//结构体整体赋值//
if(p.sex=='f')//女的进队列femaledancer//
{
enqueue(&femaledancer,p);
printf("%s进女队\n",p.name);
}
else//男的进队列maledancer//
{
enqueue(&maledancer,p);
printf("%s进男队\n",p.name);
}
}
printf("配对情况如下:\n");
while (!queueempty(&femaledancer)&&!queueempty(&maledancer))//当两个队列都不为空时,出队配对//
{
p=dequeue(&maledancer);
printf("男:%s",p.name);
p=dequeue(&femaledancer);
printf("和女:%s配对成功\n",p.name);
}
if(!queueempty(&femaledancer))//女队不为空,输出女队第一个等待人姓名//
{
printf("女队中还有%d个人在等待!\n",femaledancer.count);
p=queuefront(&femaledancer);
printf("女队中第一个等待的是:%s\n",p.name);
}
else if(!queueempty(&maledancer))//男队不为空,输出男队第一个等待人姓名//
{
printf("男队中还有%d个人在等待!\n",maledancer.count);
p=queuefront(&maledancer);
printf("男队中第一个等待的是:%s\n",p.name);
}
else printf("^-^没有人剩余^-^!\n");
}
main()
{
datatype p,dancers[queuesize];
int i,num;
printf("输入男女dancer的总人数:\n");
scanf("%d",&num);
printf("输入姓名和性别,如: \nzhangsan\nm\n");
for(i=0;i<num;i++)
{
scanf("%s",&dancers[i].name);
getchar();
scanf("%c",&dancers[i].sex);
if(dancers[i].sex!='f'&&dancers[i].sex!='m')//判断输入信息是否合法//
printf("第%d个人的信息有误,请重新输入",i--);
}
dancepartners(&dancers[0],n);
getchar();
}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式