数据结构(舞伴问题)——队列问题解决

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

分析

  • 先入队的女士和男士先出队配成舞伴

  • 首先要实现用队列来存放男女跳舞人员

  • 初始化两个队列(男队和女队)

//--------跳舞者个人信息----------
typedef struct
{char name[20];     //姓名,字符串类型char sex;  //性别,'F'表示女性,'M'表示男性
}Person;
//--------队列的顺序储存结构------------
typedef struct
{Person *base;       //队列中数据类型元素为Personint front;       //头指针值int rear;        //尾指针值
}SqQueue;
SqQueue Mdancers,Fdancers;       //分别存放男士和女士入队者队列
const int MAXSIZE=100;   //队列可能达到的最大长度,这里用#define都行,个人习惯
具体算法步骤:
  • 假设男士和女士的记录存在一个数组中作为输入

  • 构造完成后,根据遍历分别进队

  • 当有一队为空时,输出另一队第一人的名字

  • 遍历男队和女队同时出队配对

    注:

    代码大部分为自己编撰,肯定会有很多小问题,望大佬指点;

#include"bits/stdc++.h"     //#include"iostream"也行
using namespace std;
typedef char ElemType;
typedef int Status;
const int MAXSIZE=100;       /*
const int OK=1;                这里是给函数返回值类型定义
const int ERROR=0;          */
typedef struct
{char name[MAXSIZE];char sex;
}Person;
typedef struct
{Person *base;int front;int rear;
}SqQueue;
Status InitQueue(SqQueue &Q)        //队列初始化
{Q.base=new Person[MAXSIZE];if(!Q.base) return ERROR;Q.front=Q.rear=0; return OK;
}
Status EnQueue(SqQueue &Q,Person e)         //e元素入队列Q
{if((Q.rear+1)%MAXSIZE==Q.front) return ERROR;Q.base[Q.rear]=e;Q.rear=(Q.rear+1)%MAXSIZE;return OK;
}
Status DeQueue(SqQueue &Q,Person &e)         //将队列最前面的元素赋给e并出队
{if(Q.front==Q.rear) return ERROR;e=Q.base[Q.front];Q.front=(Q.front+1)%MAXSIZE;return OK;
}
Status QueueEmpty(SqQueue &Q)          //判断队是否为空
{if(Q.front==Q.rear) return OK;else return ERROR;
}
Person GetHead(SqQueue Q)          //取队头元素
{if(Q.front!=Q.rear)return Q.base[Q.front];
}
void DancePratner(Person dancer[],int num)
//结构数组dancer中存放跳舞的男女,num为跳舞的人数
{SqQueue Mdancers;      //男队初始化SqQueue 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<<"The dancing partners are:\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<<"The first woman to get partner is:"<<p.name<<endl;}else if(!QueueEmpty(Mdancers))        //男士队列是否为空{p=GetHead(Mdancers);          //取男队队头cout<<"The first man to get a partner is"<<p.name<<endl;}
}
int main()
{SqQueue Mdancers,Fdancers;Person dancer[MAXSIZE];int num;cout<<"请输入参加舞会的人数:"<<endl;cin>>num;cout<<"请输入参加舞会人员信息"<<endl;for(int i=0;i<num;i++)                  //建立参加舞会人员数组{cout<<"请输入"<<i+1<<"个人员信息:";cin>>dancer[i].name>>dancer[i].sex;        //分别将男女插入数组中}DancePratner(dancer,num);       //男女舞伴配对return 0;
}

小结:

舞伴问题很好的考察数据结构的问题,但并未考察到循环队列,此题是简化版的,完全可以让男女舞伴循环配对;

小白也能看懂的c语言队列入门问题——舞伴问题相关推荐

  1. 小白也可以看懂的PoC容量证明入门

    PoC是今年区块链领域中最值得关注的概念板块, 没有之一. 预测在一年内,PoC板块会全面爆发, 其中至少2-3个代表性项目集中爆发,冲击市值Top20: 而在两年内,大概率会有PoC龙头项目进入市值 ...

  2. 小白都能看懂的go语言包管理工具DEP详解

    简介 众所周知GO语言包管理工具百花齐放,前有godep.glide.govendor,后有dep. 今天我们来了解一下"dep",看看它是怎样实现包管理的. dep安装 二进制文 ...

  3. 小白都能看懂的C语言入门教程

    文章目录 C语言入门教程 1. 第一个C语言程序HelloWorld 2. C语言的数据类型 3. 常量变量的使用 4. 自定义标识符#define 5. 枚举的使用 6. 字符串和转义字符 7. 判 ...

  4. 小白也能看懂:一文学会入门推荐算法库 surprise

    来源 | 机器学习与推荐系统 surprise 支持的每个算法本身思路并不复杂,代码也不晦涩难懂,我们主要的目的是理解它的架构,学习框架各个部分的交互. 这篇文章是想从一个整体的视角,以作者最初的思路 ...

  5. c语言程序和plc程序的区别,一文告诉你PLC与计算机的本质区别在哪里!小白都能看懂!...

    原标题:一文告诉你PLC与计算机的本质区别在哪里!小白都能看懂! 你真的了解PLC吗?你知道PLC与计算机的本质区别吗?我来简单解释一下吧. 1.PLC可以工作在极其恶劣的电磁环境中 如果我们把计算机 ...

  6. 小白也能看懂的网络基础 | 01 什么是网络?

    公众号关注 「奇妙的 Linux 世界」 设为「星标」,每天带你玩转 Linux ! 引言 欢迎来到网络世界,<小白也能看懂的网络基础>系列文章会从零开始帮助你构建网络的基础知识.如果你完 ...

  7. 小白也能看懂:最全无线渗透测试与攻防+Fluxison钓鱼教程+路由器安全设置指南 2021.3.31

    小白也能看懂:最全无线渗透测试与攻防+Fluxison钓鱼教程+路由器安全设置指南 2021.3.31 一. 无线AP的加密方式 WEP加密 WPA-PSK/WPA2-PSK加密 WPS加密 二. 无 ...

  8. python进阶(小白也能看懂)——装饰器浅谈(一)

    python进阶(小白也能看懂)--装饰器(一) 第四篇 文章目录 python进阶(小白也能看懂)--装饰器(一) 1.函数基础知识 例子1.1 例子1.2 例子1.3 例子1.4 2.不带参数的装 ...

  9. python进阶(小白也能看懂)——Map、Filter、Reduce

    python进阶(小白也能看懂)--Map.Filter.Reduce 第三篇 Map.Filter.Reduce是python中常用的函数,使用这些函数能够给我们带来很多便捷. Map map(fu ...

最新文章

  1. 多层陶瓷电容器用处_陶瓷电容的作用及特点
  2. 运行维护:UPS电源并列运行分析及维护应用
  3. EveryNote使用说明,好用的文件备注搜索工具
  4. netatalk,轻松将linux变成你的Mac File Server!!!
  5. C++STL笔记(四):vector详解
  6. mysql 查看collation_MySQL collation方法
  7. LeetCode2.两数相加
  8. 用Azure Application Insights 监控Python应用(1)
  9. Dell T630,插一个显示器,设置中看到两个显示器
  10. metal slug java_推荐一款极速CAJ阅读器:稻壳阅读器
  11. 【TVM帮助文档学习】Relay的模式匹配
  12. linux 多线程 semaphore ,Linux下多线程编程-Pthread和Semaphore使用.doc
  13. 过期域名查询php程序,一个域名查询的程序
  14. jmeter优化记录文档
  15. 怎么把电脑文件传到弹性云服务器,怎么把电脑文件传到弹性云服务器
  16. PHP高级工程师必备技术合集
  17. 顺序表创建和就地逆置
  18. 硬件设计之电容充放电计算
  19. antv g2绘制中国地图及每个省份区域单独展示
  20. 波士顿房价(只依据一个特征的)预测

热门文章

  1. ArangoDB简单入门
  2. 【IC萌新虚拟项目】ppu模块基于spyglass的lint清理环境搭建与lint清理
  3. Ubuntu 20.04安装RStudio Server并使用conda虚拟环境
  4. 2020-数字中国创新大赛虎符网络安全赛道-Web-easy_login
  5. Java作业--(Account类的子类)在编程练习题9.7中定义了一个Account类来对一个银行账户建模。一个账户有账号、余额、年利率、开户日期等属性,以及存款和取款等方法。
  6. 你是什么时候对深度学习失去信心的?
  7. 解决CentOS-HTTP出现“httpd: Could not reliably determine the server‘s fully qualified domain name”问题
  8. php 高校党员培训管理系统 毕业设计源码56161
  9. windows 下 oracle dmp 备份
  10. 【Android】炫酷ui 带你做一个背景跟着滚动的工具