#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define OK 1
#define ERROR 0
typedef struct
{
char name[20];
char sex;
}Person;
typedef struct
{
Person m[20];//存储名字和性别
Person *base;//存储空间的基地址
int front;//头指针
int rear; //尾指针
}SqQueue;
SqQueue *mdancers(SqQueue *mq)//队列初始化
{
mq = (SqQueue *)malloc(sizeof(SqQueue));//为新建的队列申请一段存储空间
if(!mq -> base) exit(0);//存储分配失败
mq -> front = -1;//置空队
mq -> rear = -1;
return mq;
}
Inqueue(SqQueue *mq, Person p)//入队
{
if((mq -> rear + 1) % 20 == mq -> front)
{
printf("队满!");
}
else
{
mq -> rear++;
mq -> m[mq->rear] = p;
}
}
int Equeue(SqQueue *mq)//判断队列是否为空
{
if (mq -> front == mq -> rear) return OK;
else return ERROR;
}
dancers(Person p[20], int num, SqQueue *mq, SqQueue *fq)//匹配
{
int i;
Person q;
printf("请输入参与者的姓名,性别\n");
getchar();
for(i = 0; i < num; i++)
{
printf("请输入第%d个舞者的名字:\n", i + 1);
scanf("%s", &p[i].name);
printf("请输入第%d个人的性别(f/m):\n", i + 1);
scanf("%s", &p[i].sex);
while(p[i].sex != 'f' && p[i].sex != 'm')
{
printf("输入错误,请重新输入第%d个人的性别(f/m):\n", i + 1);
scanf("%s", &p[i].sex);
break;
}
}
for(i = 0; i < num; i++)//将跳舞者按照性别排入不同的队
{
q = p[i];
if (q.sex == 'm') Inqueue(mq, q);//排入男队
if(q.sex == 'f') Inqueue(fq, q); //排入女队
}
printf("匹配结果:\n");
while(!Equeue(mq) && !Equeue(fq))//出队
{
mq -> front++;
q = mq -> m[mq -> front];
printf("%s\t", q.name );
fq -> front++;
q = fq -> m[fq -> front];
printf("%s\n", q.name );
}
if(!Equeue(mq))//输出下一个等待者的名字
{
mq -> front++;
q = mq -> m[mq -> front];
printf("下一个等待匹配的人是:%s \n", q.name);
}
if(!Equeue(fq))
{
fq -> front++;
q = fq -> m[fq -> front];
printf("下一个等待匹配的人是:%s \n", q.name);
}
}
int main()
{
int num;//参与的总人数
Person p[20];
SqQueue *mq;//定义男士队列
SqQueue *fq;//定义女士队列
mq = mdancers(mq);//男士队列初始化
fq = mdancers(fq);//女士队列初始化
printf("请输入跳舞的男士与女士的总人数:");
scanf("%d", &num);
if(num > 20)
exit(0);
while(num <= 0)//输入人数为负提示重新输入
{
printf("输入错误,请重新输入跳舞的人数:");
scanf("%d", &num);
}
dancers(p, num, mq, fq);
}