利用队列的基本操作,完成舞伴问题
题目
利用队列的基本操作,完成舞伴问题
舞伴问题的描述:假设在周末舞会上,男士们和女士们进入舞厅时各自排成一队,跳舞开始时,依次从男队和女队的队头上各出一人配成舞伴,若两队初始人数不相同,则较长的那一队中未配对者等待下一轮舞曲。现要求设计一个函数模拟上述舞伴配对问题,试设计程序实现之
#include<iostream>
using namespace std;typedef struct{char name[20];char sex; //F代表女性,M代表男性
}Person;#define MaxSize 100
typedef struct{Person *base;int front;int rear;
}Seq; //队列的顺序存储结构 int Init(Seq &L){ //初始化L.base = new Person[MaxSize];L.front = L.rear = 0;return 1;
}int Enter(Seq &L,Person m){ //入队列if((L.rear+1)%MaxSize == L.front){cout<<"队列已满!";return 0; }L.base[L.rear] = m;L.rear = (L.rear + 1)%MaxSize;return 1;
}int Out(Seq &L,Person &m){ // 出队列if(L.rear == L.front){cout<<"队列空!";return 0;}m = L.base[L.front];L.front = (L.front+1)%MaxSize;return 1;
}int JudgeEmpty(Seq L){ //队列判空 if(L.rear == L.front){return 0;}return 1;
}int GetHead(Seq L,Person &m){ //取队列头元素 if(L.rear == L.front){cout<<"队列空!";return 0;} m = L.base[L.front];
} void DancePartner(Person *dancer,int num){Seq Male,Female;Person p1,p2;Init(Male);Init(Female);for(int i = 0; i < num; i++){ //男女依次入男队和女队 if(dancer[i].sex == 'F')Enter(Female,dancer[i]);else Enter(Male,dancer[i]);}cout<<"The dancing partners are:\n";while(JudgeEmpty(Male) && JudgeEmpty(Female)){Out(Female,p1);Out(Male,p2);cout<<"("<<p1.name<<","<<p2.name<<")"<<endl; } if(!JudgeEmpty(Male)){GetHead(Female,p1);cout<<"The first woman in next dance to get a partner is:"<<p1.name<<endl;}else if(!JudgeEmpty(Female)){GetHead(Male,p1);cout<<"The first man in next dance to get a partner is:"<<p1.name<<endl;}
} int main(){int num;Person dancer[MaxSize];cout<<"the number of dancers:";cin>>num;cout<<"依次输入舞者的信息(名字和性别,F代表女,M代表男)"<<endl;for(int i = 0; i < num; i++){cin>>dancer[i].name;cin>>dancer[i].sex; }DancePartner(dancer,num);return 0;
}
参考资料:
《数据结构 C语言版 第2版》严蔚敏 李冬梅 吴伟民
利用队列的基本操作,完成舞伴问题相关推荐
- 顺序队列的基本操作的实现及舞伴问题
实验内容:队列 实验题目: 顺序队列的基本操作的实现及舞伴问题 一.实验目的 1.深入了解队列的定义和特性. 2.掌握队列的数组表示.链表表示以及相应操作的实现,巩固对这两种结构的构造方法的掌握 ...
- 二叉树基本操作:利用队列实现层序遍历
利用队列实现层序遍历 关于二叉树其他的基本操作可以看我前几篇文章: 二叉树的基本操作:二叉树的后序遍历非递归算法 二叉树的遍历:前序非递归和中序非递归 二叉树基本操作:二叉树的创建与递归遍历 基础知识 ...
- java栈和队列验证回文串_栈和队列的基本操作及其应用(回文判断)
实验二栈和队列的基本操作及其应用 一.实验目的 1.掌握栈和队列的顺序存储结构和链式存储结构,以便在实际中灵活应用. 2.掌握栈和队列的特点,即后进先出和先进先出的原则. 3.掌握栈和队列的基本运算, ...
- 环形队列的输出_循环队列的基本操作详细讲解
实验学时: 2 实验类型: (设计型) 一.实验目的 1. 理解并掌握队列的逻辑结构和顺序存储结构,了解循环队列的特点: 2. 掌握循环队列中基本操作的相关算法: 3. 编程实现相关算法: 4. 学会 ...
- 顺序队列,链队列的基本操作
顺序队列,链队列的基本操作 一.实验目的 1.深入了解队列的定义和特性. 2.掌握队列的数组表示.链表表示以及相应操作的实现,巩固对这两种结构的构造方法的掌握. 3. 会灵活运用队列结构解决某些实际问 ...
- 利用“队列”解决“窗口混乱”问题
本图文利用队列这种数据结构以及多线程技术模拟了银行排队(叫号)软件的工作流程.
- python递归合并排序_python 归并排序的递归法与迭代法(利用队列)实现,以及性能测试...
递归排序核心 递归排序的核心是 分与合 分的最终结果 就是将原数组中每一个数字分作一个数组, 合就是 所有小数组不断排序,合并的过程. 合并的过程是先将两个含有一个数字的数组排序,合并(每次比较两个数 ...
- 利用队列实现车厢编组
利用队列实现车厢编组问题.假设队列元素是char类型,'H'表示硬座,'S'表示软卧,队列A表示一组硬座和卧铺混编的车厢.要求把队列A中的硬座车厢移动到队列B,队列A中的卧铺车厢移动到队列C,同时保留 ...
- (C语言版)栈和队列(一)——实现链式栈和链式队列的基本操作以及遇到的问题
http://blog.csdn.net/fisherwan/article/details/20055179 首先要感谢这位大牛的一篇博客,地址如下:http://blog.csdn.net/hgu ...
最新文章
- Google今天的logo
- 是栈还是队列c语言实验报告怎么写,队列和栈(C语言)
- python十个评委打分_八个评委打分,通过筛选确定最佳评委和最差评委。
- windows 编程 —— 消息与参数(滚动条、键盘、鼠标)
- firefox使用技巧 - 公司内部站点
- 源码解析:init-method、@PostConstruct、afterPropertiesSet孰先孰后
- 西南科技大学OJ题 Delete Numbers 0700
- python程序设计基础董付国 pdf-Python程序设计基础与应用(高等教育规划教材)
- 树莓派摄像头——图像 视频采集
- Android Studio 离线本地 TTS语音合成 Kotlin代码
- C# 获取文件名和扩展名(后缀名)
- LPC1768 SPI 外设控制DA(PCM1796)调试记录
- RobotStudio实现喷漆、打磨等功能(曲面路径生成与仿真)
- erlang 开源项目之 Bigwig
- 如何下载金融街街道卫星地图高清版大图
- 线上写入数据不成功,本地没问题的解决方法
- CouchDB系列 - 安装CouchDB
- P17 五子棋的实现4 悔棋功能
- Whale帷幄 - 内容智能分发 内容一键分发
- 服务器知识:阿里云ECS实例设置用户root密码、远程连接