队列-舞伴问题

所有男士女士存放在数组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);
     }
}

 

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