1.问题描述

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

2.问题分析

我们可以看出这是一个典型的队列问题,我们只需要把男士队和女士队看成队列,我们可以把男士和女士的信息都存储在一个数组中,再根据不同的性别存储到不同的队列中。然后开始给队列配对,当有一个队列为空的时候,另外一个队列有等待者,则输出队头等待者的姓名,此人将是下一个可以获得舞伴的人

3.代码分析

#include<iostream>
using namespace std;
#define MAXSIZE 100
#define Status int
#define OK 1
#define ERROR 0
#define QElemType Person
typedef struct{//跳舞者的个人信息 char name[20];char sex;
}Person;
typedef struct{Person *base;int font;int rear;
}SqQueue;
Status InitQueue(SqQueue &Q)//队列初始化
{Q.base=new QElemType[MAXSIZE];if(!Q.base)exit(0);Q.font=Q.rear=0;return 0;
}
Status EnQueue(SqQueue &Q,QElemType e)//入队
{if((Q.rear+1)%MAXSIZE==Q.font)return ERROR;Q.base[Q.rear]=e;Q.rear=(Q.rear+1)%MAXSIZE;return OK;
}
Status DeQueue(SqQueue &Q,QElemType &e)//出队
{if(Q.font==Q.rear)return ERROR;e=Q.base[Q.font];Q.font=(Q.font+1)%MAXSIZE;return OK;
}
QElemType GetHead(SqQueue Q)//得到队列头元素
{if(Q.font!=Q.rear)return Q.base[Q.font];
}
Status QueueEmpty(SqQueue Q)
{if(Q.font==Q.rear)return OK;return ERROR;
}
void DancePartner(Person dance[],int num)//dance表示跳舞男女的信息,num表示跳舞的人数
{SqQueue Mdancers,Wdancers;Person p;InitQueue(Mdancers);InitQueue(Wdancers);for(int i=0;i<num;i++){p=dance[i];if(p.sex=='M')EnQueue(Mdancers,p);elseEnQueue(Wdancers,p); }cout<<"The dancing partners are:\n";while(!QueueEmpty(Wdancers)&&!QueueEmpty(Mdancers)){DeQueue(Wdancers,p);cout<<p.name<<" ";DeQueue(Mdancers,p);cout<<p.name<<endl;}if(!QueueEmpty(Wdancers)){p=GetHead(Wdancers);cout<<"在第二轮舞曲才获得舞伴的女士为:"<<p.name<<endl; }if(!QueueEmpty(Mdancers)){p=GetHead(Mdancers);cout<<"在第二轮舞曲才获得舞伴的男士为:"<<p.name<<endl; }}
int main()
{int n;cout<<"请输入跳舞人的个数:";cin>>n; Person dance[n];cout<<"请依次输入跳舞人的信息\n";for(int i=0;i<n;i++){getchar(); cout<<"姓名:";cin>>dance[i].name;cout<<"性别:";cin>>dance[i].sex; }DancePartner(dance,n);}

例子:

循环队列之舞伴问题(含源码详解)相关推荐

  1. C++实现circular queue循环队列(使用数组)(附完整源码)

    C++实现circular queue循环队列使用数组 C++实现circular queue循环队列(使用数组)算法完整源码(定义,实现,main函数测试) C++实现circular queue循 ...

  2. 【java】LinkedList1.8源码详解

    目录 前言 概要 属性 构造方法 核心方法 get(int index) set(int index, E element) add(int index, E element) addAll(Coll ...

  3. Rocksdb Compaction源码详解(二):Compaction 完整实现过程 概览

    文章目录 1. 摘要 2. Compaction 概述 3. 实现 3.1 Prepare keys 过程 3.1.1 compaction触发的条件 3.1.2 compaction 的文件筛选过程 ...

  4. webbench1.5源码详解

    webbench1.5源码详解 前言        Webbench是Linux下的一个网站压力测试工具,它是由Lionbridge公司(http://www.lionbridge.com)开发.   ...

  5. 源码详解Android 9.0(P) 系统启动流程之SystemServer

    源码详解Android 9.0(P) 系统启动流程目录: 源码详解Android 9.0(P)系统启动流程之init进程(第一阶段) 源码详解Android 9.0(P)系统启动流程之init进程(第 ...

  6. OkHttp3源码详解

    前言:为什么有些人宁愿吃生活的苦也不愿吃学习的苦,大概是因为懒惰吧,学习的苦是需要自己主动去吃的,而生活的苦,你躺着不动它就会来找你了. 一.概述 OKHttp是一个非常优秀的网络请求框架,已经被谷歌 ...

  7. 李沐d2l《动手学深度学习》第二版——风格迁移源码详解

    本文是对李沐Dive to DL<动手学深度学习>第二版13.12节风格迁移的源码详解,整体由Jupyter+VSCode完成,几乎所有重要代码均给出了注释,一看就懂.需要的同学可以在文末 ...

  8. AidLux“换脸”案例源码详解 (Python)

    "换脸"案例源码详解 (Python) faceswap_gui.py用于换脸,可与facemovie_gui.py身体互换源码(上一篇文章)对照观看 打开faceswap_gui ...

  9. Vue-Watcher观察者源码详解

    源码调试地址 https://github.com/KingComedy/vue-debugger 什么是Watcher Watcher是Vue中的观察者类,主要任务是:观察Vue组件中的属性,当属性 ...

最新文章

  1. 菜鸟驿站是什么快递_95后女生在横店开菜鸟驿站,每天帮大明星和小龙套收快递...
  2. nyoj1180Maze
  3. 利用Frame Animation实现动画效果,代码正确,就是达不到变换效果
  4. 传值类型_Java内存管理:Stackoverflow问答-Java是传值还是传引用(十一)
  5. java输出华氏摄氏温度转换表_Python练习题2.10输出华氏-摄氏温度转换表
  6. 从学校到职场的路有多远
  7. touch无法创建文件或者文档
  8. 静态类型和动态类型的语言有什么区别?
  9. 传奇世界手游公益服【剑指轩辕2】服务端搭建源码使用指南
  10. 千锋重庆IT学习之微信API接口文档
  11. (详解)----冒泡排序---(图解)
  12. 编程及C/C++初学者FAQ
  13. android 启动第三方APP的方式
  14. windows7副本不是正版解决方法
  15. 思维导图、流程图制作工具ProcessOn的使用
  16. openedge-hub模块请求处理源码浅析——百度BIE边缘侧openedge项目源码阅读(2)
  17. 考研数学基础 之线性代数通法——Chapter6:合同对角化与二次型
  18. 南卡和三星蓝牙耳机哪个戴着舒服?佩戴舒适的蓝牙耳机推荐
  19. 你觉得程序员最需要具备哪些软技能?
  20. 给老鼠大脑注入光纤能控制老鼠酗酒了?!|技术前沿洞察

热门文章

  1. lua os.date函数定义和示例
  2. 《JavaScript高级程序设计》阅读笔记(三):ECMAScript中的引用类型
  3. Silverlight C# 游戏开发:游戏循环体的五种设计方式
  4. 【BZOJ】2190 [SDOI2008]仪仗队
  5. Ubuntu 14.04 DNS 配置
  6. [控件] TranformFadeView
  7. String和Date、Timestamp之间的转换
  8. myisam 表锁优化参考
  9. 452 Minimum Number of Arrows to Burst Balloons
  10. 关于Excel和Csv导入和导出工具使用