马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 划句顾 于 2021-10-17 12:48 编辑
舞伴问题
1)设置两个队列分别存放男士和女士入队者
2)假设男士和女士的记录存放在一个数组中作为输入,然后依次扫描该数组的各元素,并根据性别来决定是进入男队还是女队。
3)当这两个队列构造完成之后,依次将两队当前的队头元素出队来配成舞伴,直至某队列变空为止。
4)此时,若某队仍有等待配对者,则输出此队列中排在队头的等待者的姓名,此人将是下一轮舞曲开始时第一个可获得舞伴的人。
代码如下:/*
*author :LaoGu
*time :2021/10/16
*purpose:循环队列的应用:舞者配对
*/
#include<iostream>
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 100
#define N 8 //定义舞者数量
typedef struct{
char name[50]; //姓名
char sex; //性别,‘F’表示女性,‘M’表示男性
}Person;
typedef struct{
Person *base;
int front; //头指针
int rear; //尾指针
}SqQueue;
SqQueue Mdancers,Fdancers; //定义两个队列
//初始化函数
int InitSq(SqQueue &Q){
Q.base = new Person [MAXSIZE];
if(!Q.base) exit(OVERFLOW);
Q.front = Q.rear = 0;
return OK;
}
//判断队列是否为空
bool QueueEmpty(SqQueue Q){
if (Q.front == Q.rear)
return true;
else
return false;
}
//入队
int EnQueue(SqQueue &Q,Person e)
{
if((Q.rear+1)%MAXSIZE == Q.front) return ERROR;
Q.base[Q.rear] = e;
Q.rear=(Q.rear+1)%MAXSIZE;
return OK;
}
//出队
int DeQueue(SqQueue &Q,Person &e)
{
if(Q.front==Q.rear) return ERROR; //判断队列是否为空
e = Q.base[Q.front];
Q.front = (Q.front+1)%MAXSIZE;
return OK;
}
//取队头元素
Person GetHead(SqQueue &Q)
{
if(Q.front!=Q.rear) return Q.base[Q.front];
else
exit(ERROR);
}
//主函数
int main()
{
Person d[N]={
{"蔡蔡",'F'},
{"黄黄",'F'},
{"龙龙",'F'},
{"易烊千玺",'M'},
{"白敬亭",'M'},
{"高杨",'M'},
{"刘德华",'M'},
{"彭于晏",'M'}
},*z=d;
DancerPartner(z,N);
return 0;
}
运行结果:
或者头文件方法
注:这个可以自己输入舞者的数量和舞者的信息/*
*author :LaoGu
*time :2021/10/17
*purpose:循环队列的应用:舞者配对
*/
#include<iostream>
#include "link.h" //一些队列的定义
#include "peidui.h" //舞者配对
using namespace std;
//输入舞者信息
int Print(Person d[],int n)
{
int j;
cout<<"请输入舞者信息\n";
cout<<"姓名 "<<"性别 "<<endl;
for(j=0;j<n;j++)
{
cin>>d[j].name>>d[j].sex;
}
cout<<endl;
return 0;
}
//主函数
int main()
{
int n;
cout<<"请输入参加舞会的舞者的数量:";
cin>>n;
cout<<endl;
Person d[N],*z=d;
Print(z,n);
DancerPartner(z,n);
return 0;
}
两个自己定义的头文件
一、link文件
二、peidui文件
运行结果:
|