队列解决舞伴问题

目录

1、根据实验内容描述需求分析:

2、主程序的流程及各程序模块之间的调用关系。

3、源码分析:

 4、函数之间的调用

1、根据实验内容描述需求分析:

(1)输入的形式和输出值的范围;

输入的形式:是将舞者的姓名及性别输入(2)输出的形式:以(性名1,姓名2)的形式输出舞者彼此的舞伴(3)程序所能达到的功能:将男女舞者相互匹配,不同性别的两个人为一组。

(4)队列常见的一些操作:

入队:将元素添加到队列的尾部。
出队:将队列头部的元素移除并返回。
获取队头元素:查看队列头部的元素,但不移除。
判空:判断队列是否为空。
获取队列大小:返回队列中元素的个数。

2、主程序的流程及各程序模块之间的调用关系。

InitQueue(Queue &Que):初始化顺序表Que;

Queuelength(Queue Que):求队列长度的函数;

EnterQueue(Queue &Que,Person e):入队的函数,及那个e入队;

OutQueue(Queue &Que,Person &e):出队函数;

emptyQueue(Queue Que):判断队列是否为空;

Gethead(Queue Que):取队头元素的函数;

text(Person dancers[],int num):将输入数值的结构体数组传入函数中并进行测试、运行的函数;

3、源码分析:

以下是程序的部分函数及数据结构的定义:

(2) 使用队列编程解决舞伴问题。
typedef struct informations
{
char name[20];
//string name;
char sex;
}Person;
Person Per[max1];
typedef struct queue
{
	Person *data;
	int front;
	int rear;
}Queue,*Queue1;
Queue Mdancers,Fdancers;
//求队列的长度
int Queuelength(Queue Que){
	return (Que.rear-Que.front+max)%max;
} 
//初始化队列 
bool InitQueue(Queue &Que)
{
	Que.data = new Person[max];
	if(!Que.data) return 0;
	else Que.front=Que.rear=0;
	return OK;
} 
//入队
bool EnterQueue(Queue &Que,Person e)
{
	if((Que.rear+1)%max==Que.front) return 0;
	Que.data[Que.rear]=e;
	Que.rear=(Que.rear+1)%max;
	return OK;
} 
//出队
//Person &e 切记要用&(引用符号)否则下面的出队到p1p2后输出的会是乱码 
bool OutQueue(Queue &Que,Person &e)
{
	if(Que.front==Que.rear) return 0;
	e = Que.data[Que.front];
	Que.front=(Que.front+1)%max;
	return OK;
} 
//判断队列空时 
bool emptyQueue(Queue Que)
{
	if(Que.front==Que.rear) return OK;
	else return 0;
} 
//取队头的元素
Person Gethead(Queue Que)
{
	if(Que.front!=Que.rear) return Que.data[Que.front];
} 
//
void text(Person dancers[],int num)
{
	 bool w1= InitQueue(Fdancers);
	  bool q1 = InitQueue(Mdancers);
	  if(w1&&q1){
	  	Sleep(500); 
	  	printf("女士队列与男士队列创建成功.......\n");
	  } 
	Person p1,p2;
	for(int i=0 ;i<num;i++){
		 if(dancers[i].sex=='F'){
		 	EnterQueue(Fdancers,dancers[i]);
		 }else EnterQueue(Mdancers,dancers[i]);
	}
	//队空时输出1OK 
		while(!emptyQueue(Mdancers) && !emptyQueue(Fdancers)){
	    bool w=	OutQueue(Fdancers,p1);
	    if(w) printf("女士队列中出队成功!\n");
		Sleep(500);	    	
		bool q = OutQueue(Mdancers,p2);
		if(q) printf("男士队列中出队成功!\n");
		Sleep(500); 
		cout<<"舞伴组队为:"<<"("<<p1.name<<","<<p2.name<<")"<<endl; 
	} 
	if(!emptyQueue(Mdancers)){
		p1 = Gethead(Fdancers);
		cout<<"下一轮的第一位女士的舞伴是:"<<p1.name<<endl;
	}
	else if(!emptyQueue(Fdancers)){
		p1 =  Gethead(Mdancers);
		cout<<"下一轮的第一位男士的舞伴是:"<<p1.name<<endl;
	}
}


//队列(Queue)是一种基本的数据结构,遵循先进先出的原则。
//它类似于我们日常生活中排队等待的场景。
//队列拥有两个主要操作:入队(enqueue)和出队(dequeue)。入队操作将元素添加到队列的尾部,而出//队操作则删除队列的头部元素。这保证了先入队的元素先出队,保持了元素的顺序性。
//队列的实现方式可以使用数组或链表。数组实现的队列大小固定,需要进行扩容操作。链表实现的队列大//小可以动态调整,不存在固定大小的限制。
//队列常用于广度优先搜索(BFS)算法、系统任务调度、缓冲区管理等场景。它是解决相关问题和设计高效//算法的重要工具。
//总之,队列是一种简单但重要的数据结构,通过先进先出的原则来管理元素的顺序。它的实现方式可以是//数组或链表,并广泛应用于算法和实际应用中。

 4、函数之间的调用

int num=0;
   printf("输入参加舞会的舞者的个数:");
   scanf("%d",&num);
   printf("输入舞者的基本信息姓名以及性别(F代表女性,M代表男性)\n");
   for(int i=0;i<num;i++){
   	printf("请输入第%d个舞者的姓名及性别:",i+1);
    	cin>>Per[i].name; 
		cin>>Per[i].sex;
   }
   text(Per,num);

博主制作文章需要付出时间和心血制作不易!!如果对你有帮助的话 不妨点个赞噢
————————————————
版权声明:本文为CSDN博主「峰屹小奕」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_73620832/article/details/134089297

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值