先入队的男士或者女士先出队配成舞伴,因此设置两个队列分别存放男士和女士入队者。假设男士和女士的记录存放在一个数组中作为输出,然后依次查找该数组的各元素,并根据性别来决定是进男队还是进女队。当这两个队列构造完成之后,依次使两队当前的队头元素出队来配成舞伴,直至某队列变空为止。此时,若某队仍有等待配对者,则输出此队列中排在队头的等待着的姓名,此人将是下一轮舞曲开始时第一个可获得舞伴的人。
算法步骤:
1.初始化Mdancers和Fdancers队列;
2.反复循环,依次将跳舞者姓名根据性别插入Mdancers或Fdancers队列中;
3.当两个队列均不为空时,反复循环,依次输出男女舞伴的姓名;
4.如果Mdancers队列为空,而Fdancers队列非空,则输出Fdancers队列的队头女士的名字;
5.如果Fdancers队列为空,而Mdancers队列非空,则输出Mdancers队列的队头男士的名字;
实验代码:
#include <stdio.h>
#include <stdlib.h>
struct Person {//舞伴的姓名和性别
char name[20];
char sex;
};
struct SqQueue {//队列结构
struct Person *base;
int front;
int rear;
int size;
int MaxSize;
};
struct SqQueue *InitQueue(int MaxSize) {//初始化顺序队列
struct SqQueue *S;
S = (struct SqQueue *)malloc(sizeof(struct SqQueue));
if (S) {