#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define max 100
typedef struct
{
char name[20];
char sex;
}Person;
typedef struct
{
Person date[max];
int first;
int last;
}sequeue;
int empty(sequeue *p) //是否为空
{
if(p->first==p->last)
{
return 1;
}
else return 0;
}
void initqueue(sequeue **p) //初始化
{
*p=(sequeue*)malloc(sizeof(sequeue));
if((*p)!=NULL)
{
(*p)->first=max-1;
(*p)->last=max-1;
}
else
{
printf("memory overflow!\n");
exit (0);
}
}
void freequeue(sequeue **p)
{
if(*p==NULL)
{
printf("memory is freed\n");
}
else
{
free(*p);
}
}
Person gethead(sequeue *p) //取队头
{
Person x;
if(empty(p))
{
printf("queue is free\n");
}
x=p->date[p->first+1];
return x;
}
void Enqueue(sequeue *p,Person x)//入队
{
if((p->last+1)%max==p->first)
{
printf("队列已满\n");
getch();
}
else
{
p->last=(p->last+1)%max;
p->date[p->last]=x;
}
}
Person outqueue(sequeue *p) //出队
{
Person x;
if(empty(p))
{
printf("队列为空\n");
}
else
{
p->first=(p->first+1)%max;
x=p->date[p->first];
return x;
}
}
void wuban(Person dancer[],int num,int sum)
{
int i,j;
Person p;
sequeue *man,*women;
initqueue(&man);
initqueue(&women);
for(j=0;j<sum;j++)
{
printf("\n第%d支舞曲配对的结果:",j+1);
for(i=0;i<num;i++)
{
p=dancer[i];
if(p.sex=='F'||p.sex=='f') Enqueue(women,p);
else Enqueue(man,p);
}
printf("\n----配对结果----\n");
while(!empty(man)&&!empty(women))
{
p=outqueue(women);
printf("%s",p.name);
p=outqueue(man);
printf(" ===== %s\n",p.name);
}
getch();
if(!empty(women))
{
p=gethead(women);
printf("可在下一轮获得舞伴的是:");
printf("%c %s\n",p.sex,p.name);
printf("-------------------------------");
getch();
}
else if(!empty(man))
{
p=gethead(man);
printf("可在下一轮获得舞伴的是:");
printf("%c %s\n",p.sex,p.name);
printf("-------------------------------");
getch();
}
}
}
void main()
{
int i;
int num,sum;
sequeue *p;
Person dancer[30];
printf("请输入跳舞的人数:");
scanf("%d",&num);
printf("请输入舞曲共有多少支:");
scanf("%d",&sum);
for(i=0;i<num;i++)
{
printf("请输入舞者的姓名:");
scanf("%s",dancer[i].name);
printf("请输入舞者的性别:");
scanf("%c%c",&dancer[i].sex,&dancer[i].sex);
}
wuban(dancer,num,sum);
freequeue(&p);
}