java数据结构舞伴配对问题,【数据结构】队列的应用-舞伴配对问题

该博客介绍了一个模拟舞会舞伴配对问题的解决方案,通过使用队列数据结构来管理男、女舞者的顺序,并确保在人数不等的情况下公平配对。文章提供了C++代码实现,包括初始化队列、入队、出队、获取队头元素等操作,以及核心的PartnerPairing函数,用于根据指定轮数进行舞伴配对。此外,还给出了输入舞者人数和信息、以及舞会轮数的用户交互部分。
摘要由CSDN通过智能技术生成

舞会的舞伴配对问题:

某单位举办周末友谊舞会,在舞会上,男、女各自排成一队。舞会开始时,依次从男队和女队的队头各出一人配成舞伴。如果两队初始人数不等,则较长的那一队中未配对者等待下一轮舞曲。假设初始男、女人数已经固定,舞会的轮数表示舞曲数。试模拟解决上述舞伴配对问题。

核心代码:

void PartnerPairing(CQueue &Qm,CQueue &Qw,int Rotation){

int n,m,Min;

m=(Qm.Rear-Qm.Front+Maxn)%Maxn;

n=(Qw.Rear-Qw.Front+Maxn)%Maxn;

printf("%d %d\n",n,m);

Min=m

QElemType man,woman,dancer;

for(int i=0;i

for(int j=0;j

DeQueue(Qm,man);DeQueue(Qw,woman);

cout<"<

EnQueue(Qm,man);EnQueue(Qw,woman);

}

m>n?GetHead(Qm,dancer):GetHead(Qw,dancer);

cout<

}

}

完整的调试代码:

#include

#include

#include

#include

#include

#define Maxn 100

#define QueueSize 100

using namespace std;

typedef struct QElemType{

string name;

int age ;

QElemType(string t="Bin",int Age=20){

name=t;age=Age;

}

}QElemType;

typedef struct {

QElemType *base;

int Front ,Rear;

}CQueue;

void InitQueue(CQueue &Q){

Q.base = new QElemType [ QueueSize ];

Q.Front = Q.Rear = 0;

}

void EnQueue(CQueue &Q,QElemType e){

Q.base[Q.Rear]=e;

Q.Rear=(Q.Rear+1)%Maxn;

}

void DeQueue(CQueue &Q,QElemType &e){

if(Q.Front==Q.Rear){

printf("error !!! Queue is empty !!!\n");return ;

}

e=Q.base[Q.Front++];

Q.Front=Q.Front%Maxn;

}

void GetHead(CQueue &Q,QElemType &e){

if(Q.Front==Q.Rear){

printf("error !!! Queue is empty !!!\n");return ;

}

e=Q.base[Q.Front];

}

void PartnerPairing(CQueue &Qm,CQueue &Qw,int Rotation){

int n,m,Min;

m=(Qm.Rear-Qm.Front+Maxn)%Maxn;

n=(Qw.Rear-Qw.Front+Maxn)%Maxn;

printf("%d %d\n",n,m);

Min=m

QElemType man,woman,dancer;

for(int i=0;i

for(int j=0;j

DeQueue(Qm,man);DeQueue(Qw,woman);

cout<"<

EnQueue(Qm,man);EnQueue(Qw,woman);

}

m>n?GetHead(Qm,dancer):GetHead(Qw,dancer);

cout<

}

}

int main()

{

int n,m,Rotation;

QElemType man,woman;

CQueue Qm,Qw;

InitQueue(Qm),InitQueue(Qw);

printf("请输入舞会 男舞者,女舞者各人数: \n");

cin>>n>>m;

printf("请输入%d位男舞者的名字和年龄\n",n);

for(int i=0;i

printf("第%d位 男舞者 name , age \n",i+1);

cin>>man.name>>man.age;

EnQueue(Qm,man);

}

printf("请输入%d位女舞者的名字和年龄",m);

for(int i=0;i

printf("第%d位 女舞者 name , age \n",i+1);

cin>>woman.name>>woman.age;

EnQueue(Qw,woman);

}

printf("请输入需要多少轮舞会: ");

scanf("%d",&Rotation);

PartnerPairing(Qm,Qw,Rotation);

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值