【数据结构】 舞伴问题: 利用循环队列模拟舞伴配对问题:在舞会上,男、女各自排成一队。舞会开始时。依次从男队和女队的队头各出一人配成舞伴。如果两队初始人数不等,则较长的那一队中未配
【数据结构】舞伴问题: 利用循环队列模拟舞伴配对问题:在舞会上,男、女各自排成一队。舞会开始时。依次从男队和女队的队头各出一人配成舞伴。如果两队初始人数不等,则较长的那一队中未配对者等待下一轮舞曲。假设初始男、女人数及性别已经固定,舞会的轮数从键盘输入。试模拟解决上述舞伴配对问题。C的实现代码#include<stdio.h>#include<string.h>#...
·
C的实现代码
#include<stdio.h>
#include<string.h>
#define QMAXSIZE 100 //循环队列初始大小
typedef struct{ //定义节点存放队员的姓名和性别
char name[20];
int sex; //整形变量,0代表男性,1代表女性
}QNode;
typedef struct{
int front,rear;
int count;
QNode dancers[QMAXSIZE] ;
}CqQueue;
void InitQueue(CqQueue *fq){ //创建空队列
fq->front = fq->rear = NULL;
fq->count = 0 ;
}
int QueueEmpty(CqQueue *fq){ //判断队列是否为空
if(fq->front==fq->rear)
return 1;
return 0;
}
void EnQueue(CqQueue *fq,QNode p){ //入队列,p进入队列
fq->count++;
fq->dancers[fq->rear] = p;
fq->rear = (fq->rear+1)%QMAXSIZE;
}
QNode DeQueue(CqQueue *fq){ //出队列,用p返回出队列的值
QNode p;
while(!QueueEmpty(fq)){
p = fq->dancers[fq->front];
fq->count--;
fq->front = (++fq->front)%QMAXSIZE;
return p;
}
}
QNode QueueFront(CqQueue *fq){ //访问队头元素
return fq->dancers[fq->front];
}
int main(){
QNode dancers[QMAXSIZE];
int i,num;
printf("请输入男舞和女舞的总人数:\n");
scanf("%d",&num);
printf("请输入姓名和性别(0代表男性,1代表女性):\n");
for(int i=0;i<num;i++){
scanf("%s",&dancers[i].name);
scanf("%d",&dancers[i].sex);
if(dancers[i].sex!=0&&dancers[i].sex!=1)
printf("第%d个人信息错误,请重新输入 。\n",i--);
}
QNode p,m,w;
CqQueue men,women;
InitQueue(&men);InitQueue(&women); //初始化男女队列
for(int i=0;i<num;i++){ //队列赋值
p = dancers[i];
if(p.sex==0){
EnQueue(&men,p);
}
else EnQueue(&women,p);
}
while(!QueueEmpty(&men)&&!QueueEmpty(&women)){ //男女队列不为空时,进行男女配对
m = DeQueue(&men);
printf("出队男:%s",m.name);
w = DeQueue(&women);
printf("\t出队女:%s",w.name);
printf("\t配对成功。\n");
}
if(!QueueEmpty(&men)){
m = QueueFront(&men);
printf("男舞队列还有%d个人等待,第一个等待的队员是:%s\n",men.count,m.name);
}
else if(!QueueEmpty(&women)){
w = QueueFront(&women);
printf("女舞队列还有%d个人等待,第一个等待的队员是:%s\n",women.count,w.name);
}
else
printf("男女舞队都无剩余队员。\n");
return 0;
}
运行结果

更多推荐
所有评论(0)