学习队列的作用 队列的应用--舞伴问题

2024-02-11 09:48

本文主要是介绍学习队列的作用 队列的应用--舞伴问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

队列的应用--舞伴问题 

1、问题叙述
     假设在周末舞会上,男士们和女士们进入舞厅时,各自排成一队。跳舞开始时,依次从男队和女队的队头上各出一人配成舞伴。若两队初始人数不相同,则较长的那一队中未配对者等待下一轮舞曲。现要求写一算法模拟上述舞伴配对问题。

2、问题分析
     先入队的男士或女士亦先出队配成舞伴。因此该问题具体有典型的先进先出特性,可用队列作为算法的数据结构。
     在算法中,假设男士和女士的记录存放在一个数组中作为输入,然后依次扫描该数组的各元素,并根据性别来决定是进入男队还是女队。当这两个队列构造完成之后,依次将两队当前的队头元素出队来配成舞伴,直至某队列变空为止。此时,若某队仍有等待配对者,算法输出此队列中等待者的人数及排在队头的等待者的名字,他(或她)将是下一轮舞曲开始时第一个可获得舞伴的人。

3、具体算法及相关的类型定义  
       typedef struct{
           char name[20];
           char sex;  //性别,'F'表示女性,'M'表示男性
       }Person;
       typedef Person DataType;  //将队列中元素的数据类型改为Person
        
       void DancePartner(Person dancer[],int num)
       {//结构数组dancer中存放跳舞的男女,num是跳舞的人数。
            int i;
            Person p;
            CirQueue Mdancers,Fdancers;
            InitQueue(&Mdancers);//男士队列初始化
            InitQueue(&Fdancers);//女士队列初始化
            for(i=0;i<num;i++){//依次将跳舞者依其性别入队
                 p=dancer[i];       
                 if(p.sex=='F')
                     EnQueue(&Fdancers.p);   //排入女队
                 else
                     EnQueue(&Mdancers.p);   //排入男队
             }
             printf("The dancing partners are: \n \n");
             while(!QueueEmpty(&Fdancers)&&!QueueEmpty(&Mdancers)){
                   //依次输入男女舞伴名
                   p=DeQueue(&Fdancers);     //女士出队
                   printf("%s        ",p.name);//打印出队女士名
                   p=DeQueue(&Mdancers);     //男士出队
                   printf("%s\n",p.name);    //打印出队男士名
             }
             if(!QueueEmpty(&Fdancers)){ //输出女士剩余人数及队头女士的名字
                   printf("\n There are %d women waitin for the next  round.\n",Fdancers.count);
                   p=QueueFront(&Fdancers);  //取队头
                   printf("%s will be the first to get a partner. \n",p.name);
              }else
                  if(!QueueEmpty(&Mdancers)){//输出男队剩余人数及队头者名字
                         printf("\n There are%d men waiting for the next   round.\n",Mdacers.count);
                         p=QueueFront(&Mdancers);
                         printf("%s will be the first to get a partner.\n",p.name);
                   }
        }//DancerPartners 

这篇关于学习队列的作用 队列的应用--舞伴问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/699479

相关文章

5分钟获取deepseek api并搭建简易问答应用

《5分钟获取deepseekapi并搭建简易问答应用》本文主要介绍了5分钟获取deepseekapi并搭建简易问答应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1、获取api2、获取base_url和chat_model3、配置模型参数方法一:终端中临时将加

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时

JavaScript中的isTrusted属性及其应用场景详解

《JavaScript中的isTrusted属性及其应用场景详解》在现代Web开发中,JavaScript是构建交互式应用的核心语言,随着前端技术的不断发展,开发者需要处理越来越多的复杂场景,例如事件... 目录引言一、问题背景二、isTrusted 属性的来源与作用1. isTrusted 的定义2. 为

大数据小内存排序问题如何巧妙解决

《大数据小内存排序问题如何巧妙解决》文章介绍了大数据小内存排序的三种方法:数据库排序、分治法和位图法,数据库排序简单但速度慢,对设备要求高;分治法高效但实现复杂;位图法可读性差,但存储空间受限... 目录三种方法:方法概要数据库排序(http://www.chinasem.cn对数据库设备要求较高)分治法(常

Vue项目中Element UI组件未注册的问题原因及解决方法

《Vue项目中ElementUI组件未注册的问题原因及解决方法》在Vue项目中使用ElementUI组件库时,开发者可能会遇到一些常见问题,例如组件未正确注册导致的警告或错误,本文将详细探讨这些问题... 目录引言一、问题背景1.1 错误信息分析1.2 问题原因二、解决方法2.1 全局引入 Element

Python调用另一个py文件并传递参数常见的方法及其应用场景

《Python调用另一个py文件并传递参数常见的方法及其应用场景》:本文主要介绍在Python中调用另一个py文件并传递参数的几种常见方法,包括使用import语句、exec函数、subproce... 目录前言1. 使用import语句1.1 基本用法1.2 导入特定函数1.3 处理文件路径2. 使用ex

关于@MapperScan和@ComponentScan的使用问题

《关于@MapperScan和@ComponentScan的使用问题》文章介绍了在使用`@MapperScan`和`@ComponentScan`时可能会遇到的包扫描冲突问题,并提供了解决方法,同时,... 目录@MapperScan和@ComponentScan的使用问题报错如下原因解决办法课外拓展总结@

MybatisGenerator文件生成不出对应文件的问题

《MybatisGenerator文件生成不出对应文件的问题》本文介绍了使用MybatisGenerator生成文件时遇到的问题及解决方法,主要步骤包括检查目标表是否存在、是否能连接到数据库、配置生成... 目录MyBATisGenerator 文件生成不出对应文件先在项目结构里引入“targetProje

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J