所有男士女士存放在数组dancer中,按照性别分为两个队列,之后每个队列各出头元素进行配对,配对时输出出对人姓名,最后再输出剩余第一个人的名字。
算法思路:设置两个队列分别存储男女,先依次入队,只有两个队不空则不断出队配合,循环结束后,输出非空队的对头元素。
首先定义一个人的结构体:
typedef struct{
char *name;
char sex;
}Person,QElemType;
算法实现:
void DancePartner(Person dancers[],int n){
/*舞伴问题
设两个队列 分别储存男女
依次入队 只要两个队都不空就不断出队配对
循环结束后 输出不空的队列的队头元素*/
int i;
QElemType e1,e2;
SqQueue Mdances,Fdances;
InitQueue(Mdances);
InitQueue(Fdances);
for(i=0;i<n;i++){
if(dancers[i].sex=='F')
EnQueue(Fdances,dancers[i]);
else
EnQueue(Mdances,dancers[i]);
}
while(!QueueEmpty(Mdances)&&!QueueEmpty(Fdances)){
DeQueue(Mdances,e1);
DeQueue(Fdances,e2);
printf("%s和%s跳舞了!\n",e1.name,e2.name);
}
if(!QueueEmpty(Mdances)){
DeQueue(Mdances,e1);
printf("%s没跳舞!",e1.name);
}
else if(!QueueEmpty(Fdances)){
DeQueue(Fdances,e2);
printf("%s没跳舞!",e2.name);
}
}