数据结构》严奶奶版本---队列(3) 舞伴问题 完整源码


数据结构》-队列(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;
	
	}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值