本代码设计了变量n,即n个舞伴。
代码如下:
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <cstdio>
#define maxqsize 100
using namespace std;
typedef struct //跳舞者个人信息
{
char name[20];
char sex; //男生性别用m来表示,女生性别用f来表示
}person;
typedef struct //队列的顺序存储结构
{
person *base;
int front;
int rear;
}sqqueue;
bool initqueue(sqqueue &Q) //队列的初始化
{
Q.base =new person[maxqsize]; //为队列分配一个最大容量为maxqsize的数组空间
if(!Q.base ) exit(0); //存储分配失败
Q.front =Q.rear =0; //头指针和尾指针为零,队列为空
return true;
}
bool queueempty(sqqueue Q) //判断队列是否为空
{
if(Q.front==Q.rear)
return true;
else
return false;
}
int queuelength(sqqueue Q) //求队列长度
{
return (Q.rear -Q.front +maxqsize)%maxqsize;
}
bool enqueue(sqqueue &Q,person e) //队列的入队
{
if ((Q.rear +1)%maxqsize==Q.front)
return false;
Q.base[Q.rear ]=e;
Q.rear =(Q.rear +1)%maxqsize;
return true;
}
bool dequeue(sqqueue &Q,person &e) //队列的出队
{
if(Q.front ==Q.rear ) return false;
e=Q.base [Q.front ];
Q.front =(Q.front +1)%maxqsize;
return true;
}
person gethead(sqqueue Q) //取队列的队头元素
{
if(Q.front!=Q.rear )
return Q.base[Q.front];
}
void dancepartner(person dancer[],int num) // 舞伴配对
{
sqqueue mdancers,fdancers;
person p;
initqueue(mdancers); //男生队列初始化
initqueue(fdancers); //女生队列初始化
for(int i=0;i<num;i++) //依次将跳舞者根据其性别入队
{
p = dancer[i];
if(p.sex=='f') enqueue(fdancers,p);//插入女队
else enqueue(mdancers,p);//插入男队
}
cout<<endl;
cout<<"--成功配对的舞伴--\n";
while(!queueempty(fdancers)&&!queueempty(mdancers))
{
dequeue(fdancers,p); //女生出队
cout<<" "<<p.name<<"--"; //输出出队女生姓名
dequeue(mdancers,p); //男生出队
cout<<p.name<<endl; //输出出队男生姓名
}
if(!queueempty(fdancers)) //女生队列非空,输出队头女生的姓名
{
p=gethead(fdancers); //取女生队头
cout<<endl;
cout<<"下次第一个匹配舞伴的女生是: "<<p.name<<endl;
}
else if(!queueempty(mdancers)) //男生队列非空,输出队头男生的姓名
{
p=gethead(mdancers); //取男生队头
cout<<"下次第一个匹配舞伴的男生是: "<<p.name<<endl;
}
}
int main()
{
person dancer[1000];
int n;
cout<<"请输入所有舞者的人数: ";
cin>>n;
cout<<endl;
cout<<"请输入"<<n<<"个舞者的信息: "<<endl<<endl; //男生性别用m来表示,女生性别用f来表示
for(int i=0;i<n;i++)
{ cout<<"**请输入第"<<i+1<<"个舞者的信息: "<<endl;
cout<<" 姓名:" ;
cin>>dancer[i].name;
cout<<" 性别:" ;
cin>>dancer[i].sex;
}
dancepartner(dancer,n);
return 0;
}