本代碼設計了變量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;
}