题目

利用队列的基本操作,完成舞伴问题

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

#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. 顺序队列的基本操作的实现及舞伴问题

    实验内容:队列   实验题目:  顺序队列的基本操作的实现及舞伴问题 一.实验目的 1.深入了解队列的定义和特性. 2.掌握队列的数组表示.链表表示以及相应操作的实现,巩固对这两种结构的构造方法的掌握 ...

  2. 二叉树基本操作:利用队列实现层序遍历

    利用队列实现层序遍历 关于二叉树其他的基本操作可以看我前几篇文章: 二叉树的基本操作:二叉树的后序遍历非递归算法 二叉树的遍历:前序非递归和中序非递归 二叉树基本操作:二叉树的创建与递归遍历 基础知识 ...

  3. java栈和队列验证回文串_栈和队列的基本操作及其应用(回文判断)

    实验二栈和队列的基本操作及其应用 一.实验目的 1.掌握栈和队列的顺序存储结构和链式存储结构,以便在实际中灵活应用. 2.掌握栈和队列的特点,即后进先出和先进先出的原则. 3.掌握栈和队列的基本运算, ...

  4. 环形队列的输出_循环队列的基本操作详细讲解

    实验学时: 2 实验类型: (设计型) 一.实验目的 1. 理解并掌握队列的逻辑结构和顺序存储结构,了解循环队列的特点: 2. 掌握循环队列中基本操作的相关算法: 3. 编程实现相关算法: 4. 学会 ...

  5. 顺序队列,链队列的基本操作

    顺序队列,链队列的基本操作 一.实验目的 1.深入了解队列的定义和特性. 2.掌握队列的数组表示.链表表示以及相应操作的实现,巩固对这两种结构的构造方法的掌握. 3. 会灵活运用队列结构解决某些实际问 ...

  6. 利用“队列”解决“窗口混乱”问题

    本图文利用队列这种数据结构以及多线程技术模拟了银行排队(叫号)软件的工作流程.

  7. python递归合并排序_python 归并排序的递归法与迭代法(利用队列)实现,以及性能测试...

    递归排序核心 递归排序的核心是 分与合 分的最终结果 就是将原数组中每一个数字分作一个数组, 合就是 所有小数组不断排序,合并的过程. 合并的过程是先将两个含有一个数字的数组排序,合并(每次比较两个数 ...

  8. 利用队列实现车厢编组

    利用队列实现车厢编组问题.假设队列元素是char类型,'H'表示硬座,'S'表示软卧,队列A表示一组硬座和卧铺混编的车厢.要求把队列A中的硬座车厢移动到队列B,队列A中的卧铺车厢移动到队列C,同时保留 ...

  9. (C语言版)栈和队列(一)——实现链式栈和链式队列的基本操作以及遇到的问题

    http://blog.csdn.net/fisherwan/article/details/20055179 首先要感谢这位大牛的一篇博客,地址如下:http://blog.csdn.net/hgu ...

最新文章

  1. Google今天的logo
  2. 是栈还是队列c语言实验报告怎么写,队列和栈(C语言)
  3. python十个评委打分_八个评委打分,通过筛选确定最佳评委和最差评委。
  4. windows 编程 —— 消息与参数(滚动条、键盘、鼠标)
  5. firefox使用技巧 - 公司内部站点
  6. 源码解析:init-method、@PostConstruct、afterPropertiesSet孰先孰后
  7. 西南科技大学OJ题 Delete Numbers 0700
  8. python程序设计基础董付国 pdf-Python程序设计基础与应用(高等教育规划教材)
  9. 树莓派摄像头——图像 视频采集
  10. Android Studio 离线本地 TTS语音合成 Kotlin代码
  11. C# 获取文件名和扩展名(后缀名)
  12. LPC1768 SPI 外设控制DA(PCM1796)调试记录
  13. RobotStudio实现喷漆、打磨等功能(曲面路径生成与仿真)
  14. erlang 开源项目之 Bigwig
  15. 如何下载金融街街道卫星地图高清版大图
  16. 线上写入数据不成功,本地没问题的解决方法
  17. CouchDB系列 - 安装CouchDB
  18. P17 五子棋的实现4 悔棋功能
  19. Whale帷幄 - 内容智能分发 内容一键分发
  20. 服务器知识:阿里云ECS实例设置用户root密码、远程连接

热门文章

  1. Matrix矩阵计算
  2. 软考信息安全工程师-5天修炼-已通过
  3. 开发技巧-解决打开谷歌浏览器跳转问题
  4. 肾囊肿如何有效预防?
  5. html页面特效代码,html特效代码大全
  6. vue.js 实现全选,单选,计算商品总价格,商品件数
  7. 谷歌浏览器解决跨域问题
  8. React解决跨域问题
  9. 回顾一下—乔布斯05年在斯坦福大学的演讲
  10. 安恒西湖论剑线下上午CTF部分题目WP