php 舞伴配对,舞伴配对

/*

舞伴配对问题

来舞蹈室的顺序:

男-姓名1;男-姓名2;女-姓名3;男-姓名4;

女-姓名5;男-姓名6;男-姓名7;女-姓名8;

最终配对顺序:

男1-女3;男2-女5;男4-女8;男;男;

实验过程:->main函数

1.建立舞者结构体,依次往队列里加入人员信息(8个人,5男3女)-scanf,struct

2.进行配对->函数功能:配对

(1)初始化两个队列——InitQueue()

(2)根据性别,分别向两个队列里插入元素——EnQueue()

(3)按照(男,女)、(男、女)…这样的顺序出队——DeQueue(),printf;若其中一个队列为空,另一个队列直接出队——QueueEmpty()

*/

#include

#include

#define MAXSIZE 100

typedef struct

{

char name[20];

char sex;

}Dancer;

typedef struct

{

Dancer *base;

int front;

int rear;

}SqQueue;

//初始化

int InitQueue(SqQueue *Q)

{

Q->base=(Dancer *)malloc(sizeof(Dancer)*MAXSIZE);

if(!Q->base) return 0;

Q->front=Q->rear=0;

return 1;

}

//入队

int EnQueue(SqQueue *Q,Dancer e)

{

if((Q->rear+1)%MAXSIZE==Q->front) return 0;

Q->base[Q->rear]=e;

Q->rear=(Q->rear+1)%MAXSIZE;

return 1;

}

//出队

int DeQueue(SqQueue *Q,Dancer *e)

{

if(Q->front==Q->rear) return 0;

*e=Q->base[Q->front];

Q->front=(Q->front+1)%MAXSIZE;

return 1;

}

//判空

int QueueEmpty(SqQueue Q)

{

if(Q.rear==Q.front) return 1;

else return 0;

}

int main()

{

char a;

SqQueue Men,Women;

Dancer P,e1,e2;

InitQueue(&Men);

InitQueue(&Women);

printf("请来到的舞友签到,输入姓名和性别(m/w),我们将会按照到来的次序为您安排舞伴:");

for(int i=0;i<8;i++)

{

printf("\n姓名:");

scanf("%s",P.name);

scanf("%c",&a);

printf("性别:");

scanf("%c",&P.sex);

if(P.sex=='m')

EnQueue(&Men,P);

if(P.sex=='w')

EnQueue(&Women,P);

}

printf("\n下面是配对信息:");

while(!QueueEmpty(Men)&&!QueueEmpty(Women))

{

DeQueue(&Men,&e1);

DeQueue(&Women,&e2);

printf("\n%s(%c)&%s(%c)",e1.name,e1.sex,e2.name,e2.sex);

}

while(!QueueEmpty(Men))

{

DeQueue(&Men,&e1);

printf("\n%s(%c)",e1.name,e1.sex);

}

while(!QueueEmpty(Women))

{

DeQueue(&Women,&e2);

printf("\n%s(%c)",e2.name,e2.sex);

}

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值