#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct QNode
{
char name[10];
struct QNode *next;
}QNode,*QueuePtr;
typedef struct
{
QueuePtr front;
QueuePtr rear;
}LinkQueue;void InitQueue(LinkQueue &Q)
{//构建一个空队列
Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));
if(!Q.front)
exit(0);
Q.front->next=Q.front;
}//InitQueuevoid EnQueue(LinkQueue &Q,char *str)
{//将字符串入队
    QueuePtr p;
p=(QueuePtr)malloc(sizeof(QNode));
if(!p)
exit(0);
strcpy(p->name,str);
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
}void DeQueue(LinkQueue &Q,char *str)
{//将结点删除后连接到队列的后方
    QueuePtr p;
p=Q.front->next;
    strcpy(str,p->name);
Q.front->next=p->next;
if(Q.rear==p)
Q.rear=Q.front;
free(p);
}void GetHead(LinkQueue Q,char *str)
{//若队列非空,取队头元素
    QueuePtr p;
if(Q.front!=Q.rear)
{
p=Q.front->next;
        strcpy(str,p->name);
}
}void Dancer(LinkQueue &Q1,LinkQueue &Q2)
{//实现配对,输出配对人名单,打印下一轮等待的人名
char str[15],boy[15],girl[15],ch;
int b,g,i,k,ls,j;
printf("请输入男舞伴的人数:\n");
scanf("%d",&b);
ch=getchar();
printf("请输入男舞伴的名字:\n");
for(i=0;i<b;i++)
{
gets(str);
EnQueue(Q1,str);
}
    printf("请输入女舞伴的人数:\n");
scanf("%d",&g);
ch=getchar();
printf("请输入女舞伴的名字:\n");
for(i=0;i<g;i++)
{
gets(str);
EnQueue(Q2,str);
}
printf("请输入舞会的轮数:\n");
scanf("%d",&ls);
if(b<g)
k=b;
else
k=g;
for(i=0;i<ls;i++)
{
printf("第%d轮数配对如下:\n",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<g)
{
GetHead(Q2,str);
printf("%s在等待\n",str);
}
else
{
GetHead(Q1,str);
    printf("%s在等待\n",str);
}
}
}void main()
{
LinkQueue Q1,Q2;
    InitQueue(Q1);
InitQueue(Q2);
Dancer(Q1,Q2);
}