问题描述
假设在周末舞会上,男士和女士进入舞厅时,各自排成一队。跳舞开始时,依次从男队和女队的队头上各出一个配成舞伴。若两队初始人数不相同,则较长的那一队中未配对者等待下一轮舞曲。
问题分析
对于舞伴配对问题,先入队的男士或女士先出队配成舞伴,因此设置两个队列分别存放男士和女士入队者。输入舞者的记录根据性别来决定是进入男队还是女队。当这两个队列构造完成之后,依次将两队当前的队头元素出队来配成舞伴,直至某队列变空为止。此时,若某队仍有等待配对者,则输出此队列中排在队头的等待者的姓名,此人将是下一轮舞曲开始时第一个可获得舞伴的人。
算法步骤
(1)初始化man队列和woman队列
(2)循环读入舞者的名字和性别,根据性别插入man队列或woman队列
(3)如果两个队列都非空,依次输出男女舞伴
(4)如果man队列空woman队列非空,输出woman队列的队头女士姓名
(5)如果woman队列空man队列非空,输出man队列的对头男士姓名
完整代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct person{
char name[20];
char sex[10];
};
typedef struct QNode{
struct person Person;
struct QNode * next;
}QNode, * QueuePtr; //舞者的队列结构体
typedef struct{
QueuePtr front;
QueuePtr rear;
}LinkQueue;
void InitQueue(LinkQueue &Q){
Q.front=(QueuePtr)malloc(sizeof