小白也能看懂的c语言队列入门问题——舞伴问题
数据结构(舞伴问题)——队列问题解决
舞伴问题:假设在周末舞会上,男士们和女士们进入舞厅时,各自排成一队。跳舞开始时,依次从男队和女队的队头上各出一人配成舞伴。若两队初始人数不相同,则较长的那一队中未配对者等待下一轮舞曲。现要求写一算法模拟上述舞伴配对问题。
分析
先入队的女士和男士先出队配成舞伴
首先要实现用队列来存放男女跳舞人员
初始化两个队列(男队和女队)
//--------跳舞者个人信息----------
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语言队列入门问题——舞伴问题相关推荐
- 小白也可以看懂的PoC容量证明入门
PoC是今年区块链领域中最值得关注的概念板块, 没有之一. 预测在一年内,PoC板块会全面爆发, 其中至少2-3个代表性项目集中爆发,冲击市值Top20: 而在两年内,大概率会有PoC龙头项目进入市值 ...
- 小白都能看懂的go语言包管理工具DEP详解
简介 众所周知GO语言包管理工具百花齐放,前有godep.glide.govendor,后有dep. 今天我们来了解一下"dep",看看它是怎样实现包管理的. dep安装 二进制文 ...
- 小白都能看懂的C语言入门教程
文章目录 C语言入门教程 1. 第一个C语言程序HelloWorld 2. C语言的数据类型 3. 常量变量的使用 4. 自定义标识符#define 5. 枚举的使用 6. 字符串和转义字符 7. 判 ...
- 小白也能看懂:一文学会入门推荐算法库 surprise
来源 | 机器学习与推荐系统 surprise 支持的每个算法本身思路并不复杂,代码也不晦涩难懂,我们主要的目的是理解它的架构,学习框架各个部分的交互. 这篇文章是想从一个整体的视角,以作者最初的思路 ...
- c语言程序和plc程序的区别,一文告诉你PLC与计算机的本质区别在哪里!小白都能看懂!...
原标题:一文告诉你PLC与计算机的本质区别在哪里!小白都能看懂! 你真的了解PLC吗?你知道PLC与计算机的本质区别吗?我来简单解释一下吧. 1.PLC可以工作在极其恶劣的电磁环境中 如果我们把计算机 ...
- 小白也能看懂的网络基础 | 01 什么是网络?
公众号关注 「奇妙的 Linux 世界」 设为「星标」,每天带你玩转 Linux ! 引言 欢迎来到网络世界,<小白也能看懂的网络基础>系列文章会从零开始帮助你构建网络的基础知识.如果你完 ...
- 小白也能看懂:最全无线渗透测试与攻防+Fluxison钓鱼教程+路由器安全设置指南 2021.3.31
小白也能看懂:最全无线渗透测试与攻防+Fluxison钓鱼教程+路由器安全设置指南 2021.3.31 一. 无线AP的加密方式 WEP加密 WPA-PSK/WPA2-PSK加密 WPS加密 二. 无 ...
- python进阶(小白也能看懂)——装饰器浅谈(一)
python进阶(小白也能看懂)--装饰器(一) 第四篇 文章目录 python进阶(小白也能看懂)--装饰器(一) 1.函数基础知识 例子1.1 例子1.2 例子1.3 例子1.4 2.不带参数的装 ...
- python进阶(小白也能看懂)——Map、Filter、Reduce
python进阶(小白也能看懂)--Map.Filter.Reduce 第三篇 Map.Filter.Reduce是python中常用的函数,使用这些函数能够给我们带来很多便捷. Map map(fu ...
最新文章
- 多层陶瓷电容器用处_陶瓷电容的作用及特点
- 运行维护:UPS电源并列运行分析及维护应用
- EveryNote使用说明,好用的文件备注搜索工具
- netatalk,轻松将linux变成你的Mac File Server!!!
- C++STL笔记(四):vector详解
- mysql 查看collation_MySQL collation方法
- LeetCode2.两数相加
- 用Azure Application Insights 监控Python应用(1)
- Dell T630,插一个显示器,设置中看到两个显示器
- metal slug java_推荐一款极速CAJ阅读器:稻壳阅读器
- 【TVM帮助文档学习】Relay的模式匹配
- linux 多线程 semaphore ,Linux下多线程编程-Pthread和Semaphore使用.doc
- 过期域名查询php程序,一个域名查询的程序
- jmeter优化记录文档
- 怎么把电脑文件传到弹性云服务器,怎么把电脑文件传到弹性云服务器
- PHP高级工程师必备技术合集
- 顺序表创建和就地逆置
- 硬件设计之电容充放电计算
- antv g2绘制中国地图及每个省份区域单独展示
- 波士顿房价(只依据一个特征的)预测
热门文章
- ArangoDB简单入门
- 【IC萌新虚拟项目】ppu模块基于spyglass的lint清理环境搭建与lint清理
- Ubuntu 20.04安装RStudio Server并使用conda虚拟环境
- 2020-数字中国创新大赛虎符网络安全赛道-Web-easy_login
- Java作业--(Account类的子类)在编程练习题9.7中定义了一个Account类来对一个银行账户建模。一个账户有账号、余额、年利率、开户日期等属性,以及存款和取款等方法。
- 你是什么时候对深度学习失去信心的?
- 解决CentOS-HTTP出现“httpd: Could not reliably determine the server‘s fully qualified domain name”问题
- php 高校党员培训管理系统 毕业设计源码56161
- windows 下 oracle dmp 备份
- 【Android】炫酷ui 带你做一个背景跟着滚动的工具