主题:关于舞伴问题
谁有一个完整的代码给我参考下啊
还有 下面这是我找的 运行后有问题 没有进行配对啊 请教
#include<iostream.h>
#include"stdio.h"
#include <stdlib.h>
#define maxsize 50 //男女队列最大人数
struct Person
{
char name[50];
char sex; //性别,'W'表示女性,'M'表示男性
};
struct CirQueue
{
Person *dancer;
int front;//队头指示器
int rear;//队尾指示器
int count;//元素个数计数器
};
void InitQueue(CirQueue *Q)//初始化队列
{
Q->dancer=(Person *)malloc(maxsize*sizeof(Person));
if(!Q->dancer)
{
printf("空间分配失败");
return ;
}
Q->front=Q->rear=0;//清空队列
Q->count=0; //计数器置0
}
int QueueEmpty(CirQueue *Q)//判断队列是否为空
{
return (Q->rear-Q->front+maxsize)%maxsize;
}
Person QueueFront(CirQueue *Q)//取队头元素
{
if(!QueueEmpty(Q))
printf("Queue if empty.");
return Q->dancer[Q->front];
}
void EnQueue(CirQueue *Q,Person dancer) //入队列
{
if((Q->rear+1)%maxsize==Q->front)
return ;
Q->dancer[Q->rear]=dancer;
Q->rear=(Q->rear+1)%maxsize;
Q->count++;
}
Person DeQueue(CirQueue *Q)//出队列
{
Person temp;
if(!QueueEmpty(Q))
{
printf("Queue underflow");
exit(0);
} //队空下溢
temp=Q->dancer[Q->front];
Q->count--; //元素个数减1
Q->front=(Q->front+1)%maxsize; //循环意义下的头指针加1
return temp;
}//将队列中元素的数据类型改为Person
void DancePartner(Person *dancer,int num)//结构数组dancer中存放跳舞的男女嘉宾,num是跳舞的人数。
{
int i;
Person p;
CirQueue Mdancers,Wdancers;
InitQueue(&Mdancers);//男队初始化
InitQueue(&Wdancers);//女队初始化
for(i=0;i<num;i++)
{//依次将跳舞者按其性别入队
p=*dancer;
if(p.sex=='W')
EnQueue(&Wdancers,p); //性别为‘W’排入女队
else if(p.sex=='M')
EnQueue(&Mdancers,p); //性别为‘M’排入男队
}
printf("舞伴的搭配情况如下: \n \n");
while(QueueEmpty(&Wdancers)&&QueueEmpty(&Mdancers))
{//依次输出男女舞伴名
p=DeQueue(&Wdancers); //女嘉宾出队
printf("%s ",p.name);//打印出队女嘉宾的名字
p=DeQueue(&Mdancers); //男嘉宾出队
printf("%s\n",p.name); //打印出队男嘉宾的名字
}
printf("***********************************\n");
//输出女嘉宾剩余人数及队头女嘉宾的姓名
if(QueueEmpty(&Wdancers))
{
printf("\n共有 %d 个女嘉宾等待下一轮舞曲.\n",Wdancers.count);
p=QueueFront(&Wdancers); //取队头
printf("%s 将会是第一个找到舞伴的人. \n",p.name);
}
else
//输出男队剩余人数及队头者姓名
if(QueueEmpty(&Mdancers))
{
printf("\n共有 %d 个男嘉宾等待下一轮舞曲.\n",Mdancers.count);
p=QueueFront(&Mdancers);
printf("%s 将会是第一个找到舞伴的人.\n",p.name);
}
printf("***********************************\n");
}
void main()
{int i,j;
Person dancer [maxsize];
char dancer_name[maxsize];
char dancer_sex[maxsize];
printf("请输入参加舞会嘉宾的人数:");
scanf("%d",&i);
printf("***********************************\n");
while(i<=0)
{
printf("输入错误,请重新输入:");
scanf("%d",&i);
}
for(j=1;j<=i;j++)
{
printf("请输入第 %d 个嘉宾的名字:",j);
scanf("%s",&dancer[j-1].name);
printf("请输入第 %d 个嘉宾的性别(W/M):",j);
scanf("%s",&dancer[j-1].sex);
if (dancer[j-1].sex=='W'||dancer[j-1].sex=='M')
{}
else
{
while(dancer[j-1].sex!='W'&&dancer[j-1].sex!='M')
{
printf("输入错误,请重新再输入一次:");
scanf("%s",&dancer[j-1].sex);
}
}
}
printf("***********************************\n");
DancePartner(dancer,i);
}
还有 下面这是我找的 运行后有问题 没有进行配对啊 请教
#include<iostream.h>
#include"stdio.h"
#include <stdlib.h>
#define maxsize 50 //男女队列最大人数
struct Person
{
char name[50];
char sex; //性别,'W'表示女性,'M'表示男性
};
struct CirQueue
{
Person *dancer;
int front;//队头指示器
int rear;//队尾指示器
int count;//元素个数计数器
};
void InitQueue(CirQueue *Q)//初始化队列
{
Q->dancer=(Person *)malloc(maxsize*sizeof(Person));
if(!Q->dancer)
{
printf("空间分配失败");
return ;
}
Q->front=Q->rear=0;//清空队列
Q->count=0; //计数器置0
}
int QueueEmpty(CirQueue *Q)//判断队列是否为空
{
return (Q->rear-Q->front+maxsize)%maxsize;
}
Person QueueFront(CirQueue *Q)//取队头元素
{
if(!QueueEmpty(Q))
printf("Queue if empty.");
return Q->dancer[Q->front];
}
void EnQueue(CirQueue *Q,Person dancer) //入队列
{
if((Q->rear+1)%maxsize==Q->front)
return ;
Q->dancer[Q->rear]=dancer;
Q->rear=(Q->rear+1)%maxsize;
Q->count++;
}
Person DeQueue(CirQueue *Q)//出队列
{
Person temp;
if(!QueueEmpty(Q))
{
printf("Queue underflow");
exit(0);
} //队空下溢
temp=Q->dancer[Q->front];
Q->count--; //元素个数减1
Q->front=(Q->front+1)%maxsize; //循环意义下的头指针加1
return temp;
}//将队列中元素的数据类型改为Person
void DancePartner(Person *dancer,int num)//结构数组dancer中存放跳舞的男女嘉宾,num是跳舞的人数。
{
int i;
Person p;
CirQueue Mdancers,Wdancers;
InitQueue(&Mdancers);//男队初始化
InitQueue(&Wdancers);//女队初始化
for(i=0;i<num;i++)
{//依次将跳舞者按其性别入队
p=*dancer;
if(p.sex=='W')
EnQueue(&Wdancers,p); //性别为‘W’排入女队
else if(p.sex=='M')
EnQueue(&Mdancers,p); //性别为‘M’排入男队
}
printf("舞伴的搭配情况如下: \n \n");
while(QueueEmpty(&Wdancers)&&QueueEmpty(&Mdancers))
{//依次输出男女舞伴名
p=DeQueue(&Wdancers); //女嘉宾出队
printf("%s ",p.name);//打印出队女嘉宾的名字
p=DeQueue(&Mdancers); //男嘉宾出队
printf("%s\n",p.name); //打印出队男嘉宾的名字
}
printf("***********************************\n");
//输出女嘉宾剩余人数及队头女嘉宾的姓名
if(QueueEmpty(&Wdancers))
{
printf("\n共有 %d 个女嘉宾等待下一轮舞曲.\n",Wdancers.count);
p=QueueFront(&Wdancers); //取队头
printf("%s 将会是第一个找到舞伴的人. \n",p.name);
}
else
//输出男队剩余人数及队头者姓名
if(QueueEmpty(&Mdancers))
{
printf("\n共有 %d 个男嘉宾等待下一轮舞曲.\n",Mdancers.count);
p=QueueFront(&Mdancers);
printf("%s 将会是第一个找到舞伴的人.\n",p.name);
}
printf("***********************************\n");
}
void main()
{int i,j;
Person dancer [maxsize];
char dancer_name[maxsize];
char dancer_sex[maxsize];
printf("请输入参加舞会嘉宾的人数:");
scanf("%d",&i);
printf("***********************************\n");
while(i<=0)
{
printf("输入错误,请重新输入:");
scanf("%d",&i);
}
for(j=1;j<=i;j++)
{
printf("请输入第 %d 个嘉宾的名字:",j);
scanf("%s",&dancer[j-1].name);
printf("请输入第 %d 个嘉宾的性别(W/M):",j);
scanf("%s",&dancer[j-1].sex);
if (dancer[j-1].sex=='W'||dancer[j-1].sex=='M')
{}
else
{
while(dancer[j-1].sex!='W'&&dancer[j-1].sex!='M')
{
printf("输入错误,请重新再输入一次:");
scanf("%s",&dancer[j-1].sex);
}
}
}
printf("***********************************\n");
DancePartner(dancer,i);
}