数据结构》-队列(3) 舞伴问题 完整源码
#include <iostream>
#include <windows.h>
#include <string>
using namespace std;
typedef struct person{
string name;
char sex;
}Person;
typedef Person ElemType;
#define MAX_SIZE 10
typedef struct squeue{
ElemType *data;
int front;
int rear;
int length;
}SqQueue;
bool init_queue(SqQueue &q);
bool en_queue(SqQueue &q,ElemType data);
bool de_queue(SqQueue &q,ElemType &data);
bool judge_empty(SqQueue q);
bool judge_full(SqQueue q);
bool traverse_queue(SqQueue q);
bool clear_queue(SqQueue &q);
int get_length(SqQueue q);
bool get_head(SqQueue q,ElemType &data);
void dance_partner(Person dancer[],int num);
int main()
{
int num,i;
Person dancer[100];
cout<<"输入总人数:";
cin>>num;
for(i=0;i<num;i++)
{
cout<<"输入第"<<i+1<<"个舞者性别:";
cin>>dancer[i].sex;
cout<<"输入第"<<i+1<<"个舞者姓名:";
cin>>dancer[i].name;
}
dance_partner(dancer,num);
return 0;
}
bool init_queue(SqQueue &q)
{
q.data = new ElemType[MAX_SIZE];
if(!q.data)
{
cout<<"初始化失败"<<endl;
return false;
}
q.front = q.rear = 0;
cout<<"初始化完成"<<endl;
return true;
}
bool en_queue(SqQueue &q,ElemType data)
{
if(judge_full(q))
{
cout<<"队列已满"<<endl;
return false;
}
q.data[q.rear] = data;
q.rear = (q.rear + 1) % MAX_SIZE;
return true;
}
bool de_queue(SqQueue &q,ElemType &data)
{
if(judge_empty(q))
{
cout<<"队列为空"<<endl;
return false;
}
data = q.data[q.front];
q.front = (q.front + 1) % MAX_SIZE;
return true;
}
bool judge_empty(SqQueue q)
{
if(q.front == q.rear)
return true;
return false;
}
bool judge_full(SqQueue q)
{
if((q.rear+1) % MAX_SIZE == q.front)
return true;
return false;
}
bool clear_queue(SqQueue &q)
{
q.front = q.rear = 0;
cout<<"清空完成"<<endl;
return true;
}
int get_length(SqQueue q)
{
int length;
if(judge_empty(q))
{
cout<<"队列为空"<<endl;
return 0;
}
length = (q.rear - q.front + MAX_SIZE) % MAX_SIZE;
return length;
}
bool get_head(SqQueue q,ElemType &data)
{
if(judge_empty(q))
{
cout<<"队列为空"<<endl;
return false;
}
data = q.data[q.front];
return true;
}
void dance_partner(Person dancer[],int num)
{
SqQueue boy;
SqQueue girl;
SqQueue temp;
Person p;
int i;
init_queue(boy);
init_queue(girl);
for(i=0;i<num;i++)
{
p = dancer[i];
if(p.sex=='F')
en_queue(girl,p);
else
en_queue(boy,p);
}
boy.length = get_length(boy);
girl.length = get_length(girl);
cout<<boy.length<<endl;
cout<<girl.length<<endl;
if(boy.length > girl.length)
{
temp = boy;
boy = girl;
girl = temp;
}
cout<<boy.length<<endl;
cout<<girl.length<<endl;
system("pause");
cout<<"输入要进行的舞会轮数:";
cin>>i;
while(i--)
{
while(!judge_empty(boy))
{
if(judge_empty(girl))
girl.front = girl.front % girl.length;
de_queue(boy,p);
cout<<p.name<<" ";
de_queue(girl,p);
cout<<p.name<<endl;
}
boy.front = boy.front % boy.length;
if(judge_empty(girl))
girl.front = girl.front % girl.length;
get_head(girl,p);
cout<<"first:"<<p.name<<endl;
}
}