數據結構實驗項目三:隊列的基本操作應用


本代碼設計了變量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;
}



















發佈了43 篇原創文章 · 獲贊 19 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章