#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef struct{
char name [20];
}Person;
typedef struct{
Person *base;
int front;
int rear;
}SqQueue;
Status InitQueue (SqQueue *Q)
{
Q->base=(Person *)malloc(MAXSIZE*sizeof(Person));
if(!Q->base) exit(OVERFLOW);
Q->front=Q->rear=0;
return OK;
}
Status EnQueue(SqQueue *Q, Person e)
{
if ((Q->rear+1)%MAXSIZE==Q->front)
return ERROR;
Q->base[Q->rear]=e;
Q->rear=(Q->rear+1)%MAXSIZE;
return OK;
}
Status DeQueue(SqQueue *Q, Person *e)
{
if(Q->front==Q->rear) return ERROR;
*e=Q->base[Q->front];
Q->front=(Q->front+1)%MAXSIZE;
return OK;
}
Person GetHead(SqQueue Q)
{
if(Q.front!=Q.rear)
return Q.base[Q.front];
}
Status QueueEmpty(SqQueue Q)
{
if(Q.front==Q.rear) return OK;
else return ERROR;
}
void DancePartner(Person Fdancer[],Person Mdancer[],int num,int num1,int num2)
{
SqQueue Mdancers,Fdancers;
Person p;
Person q;
int i;
InitQueue(&Mdancers);
InitQueue(&Fdancers);
for(i=0;i<num1;i++)
{
p=Fdancer[i];
EnQueue(&Mdancers,p);
}
for(i=0;i<num2;i++)
{
p=Mdancer[i];
EnQueue(&Fdancers,p);
}
for(i=0;i<num;i++)
{
while(!QueueEmpty(Fdancers)&&!QueueEmpty(Mdancers))
{
DeQueue(&Fdancers,&p);
DeQueue(&Mdancers,&q);
printf("配对的舞者:%s %s\n",p.name,q.name);
}
if (!QueueEmpty(Fdancers))
{
p=GetHead(Fdancers);
printf("第一个出场的未配对的舞者姓名: %s\n", p.name);
}
else if (!QueueEmpty (Mdancers))
{
p=GetHead(Mdancers);
printf("第一个出场的未配对的舞者姓名: %s\n", p.name);
}
}
int main()
{
Person Mdancer[MAXSIZE];
int j,i,num,num1,num2;
printf("男队:\n");
printf("输入跳舞人数:");
scanf("%d",&num1);
printf("输入跳舞者的姓名:\n");
for(i=0;i<num1;i++)
{
scanf("%s",&Mdancer[i].name);
}
Person Fdancer[MAXSIZE];
printf("女队:\n");
printf("输入跳舞人数:");
scanf("%d",&num2);
printf("输入跳舞者的姓名:\n");
for(j=0;j<num2;j++)
{
scanf("%s",&Fdancer[j].name);
}
printf("请输入舞会的论数:");
scanf("%d",&num);
DancePartner(Fdancer,Mdancer,num,num1,num2);
return 0;
}