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

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

相关文章

CSS中的Static、Relative、Absolute、Fixed、Sticky的应用与详细对比

《CSS中的Static、Relative、Absolute、Fixed、Sticky的应用与详细对比》CSS中的position属性用于控制元素的定位方式,不同的定位方式会影响元素在页面中的布... css 中的 position 属性用于控制元素的定位方式,不同的定位方式会影响元素在页面中的布局和层叠关

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

MySQL 设置AUTO_INCREMENT 无效的问题解决

《MySQL设置AUTO_INCREMENT无效的问题解决》本文主要介绍了MySQL设置AUTO_INCREMENT无效的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录快速设置mysql的auto_increment参数一、修改 AUTO_INCREMENT 的值。

关于跨域无效的问题及解决(java后端方案)

《关于跨域无效的问题及解决(java后端方案)》:本文主要介绍关于跨域无效的问题及解决(java后端方案),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录通用后端跨域方法1、@CrossOrigin 注解2、springboot2.0 实现WebMvcConfig

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Go语言中泄漏缓冲区的问题解决

《Go语言中泄漏缓冲区的问题解决》缓冲区是一种常见的数据结构,常被用于在不同的并发单元之间传递数据,然而,若缓冲区使用不当,就可能引发泄漏缓冲区问题,本文就来介绍一下问题的解决,感兴趣的可以了解一下... 目录引言泄漏缓冲区的基本概念代码示例:泄漏缓冲区的产生项目场景:Web 服务器中的请求缓冲场景描述代码

SpringBoot 中 CommandLineRunner的作用示例详解

《SpringBoot中CommandLineRunner的作用示例详解》SpringBoot提供的一种简单的实现方案就是添加一个model并实现CommandLineRunner接口,实现功能的... 目录1、CommandLineRunnerSpringBoot中CommandLineRunner的作用

Java死锁问题解决方案及示例详解

《Java死锁问题解决方案及示例详解》死锁是指两个或多个线程因争夺资源而相互等待,导致所有线程都无法继续执行的一种状态,本文给大家详细介绍了Java死锁问题解决方案详解及实践样例,需要的朋友可以参考下... 目录1、简述死锁的四个必要条件:2、死锁示例代码3、如何检测死锁?3.1 使用 jstack3.2

解决JSONField、JsonProperty不生效的问题

《解决JSONField、JsonProperty不生效的问题》:本文主要介绍解决JSONField、JsonProperty不生效的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录jsONField、JsonProperty不生效javascript问题排查总结JSONField

github打不开的问题分析及解决

《github打不开的问题分析及解决》:本文主要介绍github打不开的问题分析及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、找到github.com域名解析的ip地址二、找到github.global.ssl.fastly.net网址解析的ip地址三