数据结构编程题求解

数据结构编程题求解利用循环队列模拟舞伴配对问题:在舞会上,男、女各自排成一队。舞会开始时。依次从男队和女队的队头各出一人配成舞伴。如果两队初始人数不等,则较长的那一队中未配对者等待下一轮舞曲。 2、假设初始男、女人数及性别已经固定,舞会的轮数从键盘输入。 试模拟解决上述舞伴配对问题。 3、要求:从屏幕输出每一轮舞伴配对名单,如果在该轮有未配对的,能够从屏幕显示下一轮第一个出场的未配对者的姓名。

#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");
}
void 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],num);
getchar();
}追问

你这个我在百度上看过

我那还有两个要求呢

温馨提示:答案为网友推荐,仅供参考
相似回答