您的位置:首页 > 其它

队列解决队员分配问题

2012-12-05 19:20 274 查看
/*老师的要求是用队列  1.把人的资料输入数组中包括性别 姓名 2读取资料3性别为男的
一对为女的一队 没队分别拿出一个成员为舞伴知道其中一个成员没有成员了 剩下的那个
队里 把剩下的成员资料输出  以及剩下的人数*/
//1男,2女
#include<string>
#include<iostream>
#include<iomanip>
using namespace std;
typedef struct MALEode
{
string name;
struct MALEode *next;
}MALE,FEMALE,OUT,*QP;
typedef struct
{
QP head;
QP tail;
}LQ;
//男队列初始化
LQ Minitq()
{
LQ M;
M.head=M.tail=new MALE;
if(!M.head) //开辟空间失败
exit(0);
M.head->next=NULL;
return M;
}
//男入队
LQ Menq(LQ M,string e)
{
MALE *p;
p=new MALE;
if(!p) exit(0);
p->name =e;
p->next=NULL;
M.tail->next=p;
M.tail=p;
return M;
}
//女队列初始化
LQ FMinitq()
{
LQ FM;
FM.head=FM.tail=new FEMALE;
if(!FM.head) //开辟空间失败
exit(0);
FM.head->next=NULL;
return FM;
}
//女入队
LQ FMenq(LQ FM,string e)
{
MALE *p;
p=new MALE;
if(!p) exit(0);
p->name =e;
p->next=NULL;
FM.tail->next=p;
FM.tail=p;
return FM;
}
//输出队列
void print(LQ M,LQ FM,int k)
{
OUT *ph1,*ph2;
int j=0;
ph1=M.head->next;
ph2=FM.head->next;
for(int i=1;i<=k;i++)
{
cout<<ph1->name<<"的搭配队友为:"<<ph2->name ;
cout<<endl;
ph1=ph1->next;
ph2=ph2->next;
}
cout<<"没有搭档的队员表单:"<<endl;
while(ph2!=FM.tail->next)
{
j++;
cout<<ph2->name<<endl ;
ph2=ph2->next;
};
cout<<"共剩下"<<j<<"人"<<endl;
}
//统计男女个数
int num(LQ xb)
{
OUT *ph;
int i=0;
ph=xb.head->next;
while(ph!=xb.tail->next)
{ i++;
ph=ph->next;
}
return i;
}
void main()
{
LQ male,female;
string name;
int xb=1,i,j;
cout<<"请输入男女队员姓名(在姓名前加1仪表男,2仪表女)当姓别为0时结束"<<endl;
male=Minitq();
female=FMinitq();
cin>>xb>>name;
do
//根据输入的1,2来选择入的队列
{
if(xb==1) male=Menq(male,name);
else female=FMenq(female,name);
cin>>xb>>name;
}while(xb!=0);
i=num(male);
j=num(female);
if(i<j) print(male,female,i);
else    print(female,male,j);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: