题目:假设在周末舞会上,男士们和女士们进入舞厅时,各自排成一队。跳舞开始时,一次从男队和女队的队头上各自出一人配成舞伴。若两队初始人数不相同,则较长的那一队中未配对者等待下一轮舞曲。
#include <stdio.h>
#include <stdlib.h>
typedef struct queue //用链式队列
{
char name;
struct queue *next;
}QUEUE;
QUEUE *frontM=NULL,*rearM=NULL;
QUEUE *frontF=NULL,*rearF=NULL;
void AddQueue(char x,int flag)//添加结点函数
{
QUEUE *s;//新建一个结点
s=(QUEUE*)malloc(sizeof(QUEUE));
s->name=x;
s->next=NULL;
if(flag==1)//性别为男,加入男队列中
{
if(frontM==NULL)
frontM=s;
else
rearM->next=s;
rearM=s;
}
else //性别为女,加入女队列中
{
if(frontF==NULL)
frontF=s;
else
rearF->next=s;
rearF=s;
}
}
void DelQueue(char *e,int flag)//删除结点函数,配过对的要删掉
{
QUEUE *frontT;//临时结点
if(flag==1)
frontT=frontM;
else
frontT=frontF;
if(frontT==NULL)
printf("QUEUE is empty!");
else
{
QUEUE *temp;//新建一个临时结点
temp=frontT->next;//用temp记录下位置
*e=frontT->name;
free(frontT);//把传过来的结点删掉
frontT=temp;
}
if(flag==1)
frontM=frontT;//再把此时结点的位置传给头结点
else
frontF=frontT;
return;
}
void InitiQueue()//初始化队列函数
{
int flag;//性别标志
int lenF,lenM;
char c;//姓名
c='A';
while(c!='\n'&&c!=NULL)
{
AddQueue(c,1);
c=getchar();
}
c='a';
while(c!='\n'&&c!=NULL)
{
AddQueue(c,0);
c=getchar();
}
}
void DisplayQueue(int flag)//显示队列
{
QUEUE *tempr,*tempf;
if(flag==1)
{
tempr=rearM;
tempf=frontM;
}
else
{
tempr=rearF;
tempf=frontF;
}
if(tempr==NULL)
{
printf("Queue is empty\n");
return;
}
while (tempf!=NULL)
{
printf(" %c",tempf->name);
tempf=tempf->next;
}
printf("\n");
}
void Dance()
{
int flag;
printf("舞会开始前,初始化队列\n");
InitiQueue();
printf("男队列:");DisplayQueue(1);
printf("女队列:");DisplayQueue(0);
printf("舞会开始\n");
char name;
while(name!='0')
{
printf("一支曲子开始\n");
while(frontM!=NULL && frontF!=NULL)
{
DelQueue(&name,1);
printf("%c",name);
DelQueue(&name,0);
printf("%c",name);
}
printf("\n");
printf("男队列:");DisplayQueue(1);
printf("女队列:");DisplayQueue(0);
printf("一支曲子结束\n");
printf("有人进队,输入性别和姓名\n");
scanf("%d",&flag);name=getchar();
AddQueue(name,flag);
if(rearM->name=='0'||rearF->name=='0')
{
printf("舞会结束,停止进队\n");
break;
}
else
{
printf("有人进队,输入性别和姓名\n");
scanf("%d",&flag);
name=getchar();
AddQueue(name,flag);
printf("男队列:");DisplayQueue(1);
printf("女队列:");DisplayQueue(0);
}
}
}
void main()
{
Dance();
}