数据结构舞伴问题——C语言

#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);
}

 

    原文作者:舞伴问题
    原文地址: https://blog.csdn.net/qq_42420920/article/details/83902318
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞