数据结构(三):舞伴配对问题(C++,队列)
好家伙,
题目如下:
1.舞伴配对问题:假设在周末舞会上,男士们和女士们进入舞厅时,各自排成一队。跳舞开始时,依次从男队和女队的队头上各出一人配成舞伴。
2.若两队初始人数不相同,则较长的那一队中未配对者等待下一轮舞曲。要求编写程序,模拟上述舞伴配对问题,且规定:
程序的输入时:进入舞厅人员的姓名和性别。
程序输出是:如果是配对的,则输出两个舞伴的人的姓名;
如果是未配成对的,则输出等待配对的人数和下一轮舞曲开始时第一个可获得舞伴的人。
题目分析如下:
首先建立两个队列,一个队列存放男士,一个队列存放女士,
配对时,每轮每个队列的队头元素出来配对,未配对的放到下一轮继续配对。
最后,将有剩余的男或女输出
(用m和f分别表示男和女,m:male,f:female)
#include <iostream>
using namespace std;
//定义一个人的结构体,用于存放参加舞会的人员的名字和性别
typedef struct
{
char name[20];
char sex;
}Person; //定义一个队列的结构体,成员变量有结构体数组、头指针、尾指针和队列长度
typedef struct
{
Person person[20];
int front1=0;
int rear=0;
int count1=0;
}SqQuene; //配对函数
void Arrange(Person* person,SqQuene* Male,SqQuene* Female,int num)
{
cout<<"请输入参与舞会的人员的名字和性别:(M/m:男 F/f:女)"<<endl;
//根据你输入的人数,进行循环输入成员的信息,同时根据成员的性别分别插入对应的队列
for(int i = 0;i < num; i++)
{
cin>>person[i].name>>person[i].sex;
if(person[i].sex == 'M' || person[i].sex == 'm')
{
Male->person[Male->rear++] = person[i];
Male->count1++;
}
else if(person[i].sex == 'F' || person[i].sex == 'f')
{
Female->person[Female->rear++] = person[i];
Female->count1++;
}
else
{
cout<<"您的输入有误,请重新输入!"<<endl; //如果输入的性别有误,就重新输入,并保证人数不会出错
i--;
}
} cout<<"配对结果:"<<endl;
cout<<"男 女"<<endl;
while(Male->count1 > 0 && Female->count1 > 0) //当两个队列的个数不为0时,输出两个队列的对头元素
{
cout<<Male->person[Male->front1].name<<"——"<<Female->person[Female->front1].name<<endl;
Male->front1++;
Female->front1++;
Male->count1--;
Female->count1--;
} //如果男士队有剩余,输出男士队的队头元素
if(Male->count1 > 0)
{
cout<<"下一轮男生队伍的第一位:"<<Male->person[Male->front1].name<<endl;
} //如果女士队有剩余,输出女士队的队头元素
if(Female->count1 > 0)
{
cout<<"下一轮女生队伍的第一位:"<<Female->person[Female->front1].name<<endl;
}
//否则无剩余
if(Male->count1 == 0 && Female->count1 == 0)
{
cout<<"该轮无剩余人员!"<<endl;
}
} int main()
{
int num,flag = 1; //定义两个变量,一个存放插入的人数,一个是标志变量
Person* person = new Person[20]; //定义一个结构体数组
SqQuene* female = new SqQuene; //定义一个指向女队列的队列指针
SqQuene* male = new SqQuene; //定义一个指向男队列的队列指针
while(flag == 1) //判断循环条件
{
cout<<"请输入本轮跳舞的人数:"<<endl;
cin>>num;
Arrange(person,male,female,num); //调用配对函数
cout<<"输入1继续"<<endl;
cin>>flag; //判断变量是否满足循环条件
}
delete []person; //释放数组所占空间
cout<<"感谢您的使用,再见!"<<endl;
return 0;
}
输入样例:
panghu m
xiaofu m
jinxiang f
xiaohong f
xiaobing f
输出样例:
男 女
panghu——jinxiang
xiaofu——xiaohong
下一轮女生队伍的第一个:xiaobing
图示:

数据结构(三):舞伴配对问题(C++,队列)的更多相关文章
- SDUT-2133_数据结构实验之栈与队列三:后缀式求值
数据结构实验之栈与队列三:后缀式求值 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 对于一个基于二元运算符的后缀表示式 ...
- C语言数据结构——第三章 栈和队列
三.栈和队列 栈和队列是两种重要的线性结构.从数据结构的角度来看,栈和队列也是线性表,它的特殊性在于栈和队列的基本操作是线性表操作的子集,它们的操作相对于线性表来说是受到限制的,因此,可以称其为限定性 ...
- 学习javascript数据结构(三)——集合
前言 总括: 本文讲解了数据结构中的[集合]概念,并使用javascript实现了集合. 原文博客地址:学习javascript数据结构(三)--集合 知乎专栏&&简书专题:前端进击者 ...
- 数据结构图文解析之:队列详解与C++模板实现
0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 ...
- SDUT-3334_数据结构实验之栈与队列七:出栈序列判定
数据结构实验之栈与队列七:出栈序列判定 Time Limit: 30 ms Memory Limit: 1000 KiB Problem Description 给一个初始的入栈序列,其次序即为元素的 ...
- 自己动手实现java数据结构(八) 优先级队列
1.优先级队列介绍 1.1 优先级队列 有时在调度任务时,我们会想要先处理优先级更高的任务.例如,对于同一个柜台,在决定队列中下一个服务的用户时,总是倾向于优先服务VIP用户,而让普通用户等待,即使普 ...
- 数据结构与算法Java描述 队列
package com.cjm.queue; /** * 数据结构与算法Java实现 队列 * * @author 小明 * */ public class Myqueue { private Nod ...
- (三)RabbitMQ消息队列-Centos7下安装RabbitMQ3.6.1
原文:(三)RabbitMQ消息队列-Centos7下安装RabbitMQ3.6.1 如果你看过前两章对RabbitMQ已经有了一定了解,现在已经摩拳擦掌,来吧动手吧! 用什么系统 本文使用的是Cen ...
- SDUT-2088_数据结构实验之栈与队列十一:refresh的停车场
数据结构实验之栈与队列十一:refresh的停车场 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description refresh最近发 ...
- SDUT-2449_数据结构实验之栈与队列十:走迷宫
数据结构实验之栈与队列十:走迷宫 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 一个由n * m 个格子组成的迷宫,起 ...
随机推荐
- [转帖]JAVA之G1垃圾回收器
https://www.cnblogs.com/boanxin/p/12292331.html 概述 G1 GC,全称Garbage-First Garbage Collector,通过-XX:+Us ...
- IIS 实现autoindex的简单方法 能够下载文件等.
之前使用nginx 的autoindex on 的参数 能够实现了 nginx的 目录浏览查看文件 但是那是linux上面的 windows 上面很多 使用的 其实是 iis的居多 然后看了下 其实也 ...
- 基于华为fusionstorage的块存储CSI
承接上文,块存储的CSI要比对象存储复杂一些,但总的处理逻辑还是一致的.下面以华为fusionstorage的CSI为例进行介绍,该插件支持了多个后端存储,如fusionstorage和oceanst ...
- 京东云RASP云原生安全免疫创新实践
作者:京东云 刘一鑫 1 背景 随着网络攻击事件整体呈上升趋势,应用作为网络入口承载着大量业务和流量,因此成为了安全的重灾区.黑客往往借助自动化的工具以及安全漏洞,对Web进行漏洞扫描和探测,进而利用 ...
- 玩一玩 VictoriaLogs
作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 下载 see: https://github.com/Vi ...
- 【JS 逆向百例】网洛者反爬练习平台第四题:JSFuck 加密
关注微信公众号:K哥爬虫,持续分享爬虫进阶.JS/安卓逆向等技术干货! 声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后 ...
- 案例:DG备库报错ORA-600[2619]致使mrp进程异常终止
很多刚入行的DBA往往一看有ORA-600这类错误就不知所措,直接就想寻求中高级DBA支持,甚至在网上还看到有人说,判断一个Oracle DBA是否达到中级以上,就是看其是否可以独立思考处理ORA-6 ...
- Nodepad++格式化XML和JSON字符串
(一)格式化XML 1.安装XML Tools 在notepad++中点击菜单栏[插件]-[插件管理]. 在插件管理界面选择[XML Tools],点击[安装]. 2.打开XML文件 在notepad ...
- MYSQL-另一种行转列的实现方式
行转列的实现方式:使用mysql.help_topic --行转列 SELECT b.help_topic_id, substring_index( a.levels, ',', b.help_top ...
- CF1822F Gardening Friends
题目链接 题解 知识点:树的直径,枚举. 考虑一个结论:树上任意点的最远点一定是树的直径的端点. 那么对于一个根节点,只要知道了树的直径,那么我们就可以立即得到最远距离,即乘 \(k\) 树的价值. ...