数据结构实验项目三:队列的基本操作应用


本代码设计了变量n,即n个舞伴。

代码如下:

#include <iostream>
#include <stdlib.h>  
#include <string.h> 
#include <cstdio>
#define maxqsize 100
using namespace std;

typedef struct 	//跳舞者个人信息 
{
	char name[20];
	char sex;		//男生性别用m来表示,女生性别用f来表示

}person;

typedef struct      //队列的顺序存储结构 
{
	person *base;
	int front;
	int rear;
}sqqueue; 


bool initqueue(sqqueue &Q)   //队列的初始化 
{
	Q.base =new person[maxqsize];  //为队列分配一个最大容量为maxqsize的数组空间 
	if(!Q.base )  exit(0);    //存储分配失败 
	Q.front =Q.rear =0; 	//头指针和尾指针为零,队列为空 
	return true;
}

bool queueempty(sqqueue  Q)       //判断队列是否为空                           
{
 	if(Q.front==Q.rear)  
        return true;  
    else  
        return false;  	
}

int queuelength(sqqueue Q)  //求队列长度 
{
	return (Q.rear -Q.front +maxqsize)%maxqsize;
}

bool enqueue(sqqueue &Q,person e)  //队列的入队 
{
	if ((Q.rear +1)%maxqsize==Q.front)
		return false;
	Q.base[Q.rear ]=e;
	Q.rear =(Q.rear +1)%maxqsize;
	return true;
}

bool dequeue(sqqueue &Q,person &e)  //队列的出队 
{
	if(Q.front ==Q.rear )	return false;
	e=Q.base [Q.front ];
	Q.front =(Q.front +1)%maxqsize;
	return true;
}

person gethead(sqqueue Q)  //取队列的队头元素 
{
	if(Q.front!=Q.rear )
		return Q.base[Q.front];
}

void dancepartner(person dancer[],int num) // 舞伴配对 
{
	sqqueue  mdancers,fdancers;
	person p;
	initqueue(mdancers);   //男生队列初始化 
	initqueue(fdancers);   //女生队列初始化 
	for(int i=0;i<num;i++)  //依次将跳舞者根据其性别入队 
	{
		p = dancer[i];
		if(p.sex=='f')  enqueue(fdancers,p);//插入女队 
		else  enqueue(mdancers,p);//插入男队 
	}
	cout<<endl;
	cout<<"--成功配对的舞伴--\n";
	while(!queueempty(fdancers)&&!queueempty(mdancers))
	{
		dequeue(fdancers,p); 	 //女生出队 
		cout<<"    "<<p.name<<"--";		//输出出队女生姓名 
		dequeue(mdancers,p);	//男生出队
		cout<<p.name<<endl;	//输出出队男生姓名 
	}
	if(!queueempty(fdancers)) 	//女生队列非空,输出队头女生的姓名 
	{
		p=gethead(fdancers);  	//取女生队头 
		cout<<endl;
		cout<<"下次第一个匹配舞伴的女生是: "<<p.name<<endl;
	}
	else if(!queueempty(mdancers))  //男生队列非空,输出队头男生的姓名
	{
		p=gethead(mdancers);	//取男生队头
		cout<<"下次第一个匹配舞伴的男生是: "<<p.name<<endl;
	}
}

int main()
{
	person dancer[1000];
	int n; 
	cout<<"请输入所有舞者的人数: "; 
	cin>>n; 
	cout<<endl;
	cout<<"请输入"<<n<<"个舞者的信息: "<<endl<<endl; //男生性别用m来表示,女生性别用f来表示 
	for(int i=0;i<n;i++)
	{	cout<<"**请输入第"<<i+1<<"个舞者的信息: "<<endl; 
		cout<<"  姓名:" ; 
		cin>>dancer[i].name;
		cout<<"  性别:" ;
		cin>>dancer[i].sex; 
	}
	dancepartner(dancer,n);
	return 0;
}



















猜你喜欢

转载自blog.csdn.net/sang_12345/article/details/78522583