1. 排队找舞伴的问题可以转化为队列问题,分男女构建两个队列,通过性别判断跳舞者放进哪个队列。
  2. 在代码实现中,我采用文件输入的方式将跳舞者的名字和性别赋值给dancer数组,再通过传数组的方式将Dancer入队。
  3. 在完成书本任务的同时,我改进解决方案,使舞者可以循环配对寻找舞伴

!!!注意,cv代码时,需要自己在项目下建立一个txt文件,里面是跳舞人员信息。这样才能正常运行

1.#include <iostream>
2.#include <fstream>
3.#define MaxSize 100
4.#define ERROR 0
5.#define OK 1
6.using namespace std;
7.typedef int Status;
8.typedef struct
9.{
10. char name[20];
11. char sex;
12.}Dancer;
13.typedef struct
14.{
15. Dancer *base;
16. int front;
17. int rear;
18.}SqQueue;
19.Status InitQueue(SqQueue &Q)
20.{
21. Q.base=new Dancer[MaxSize];
22. if(!Q.base) exit(ERROR);
23. Q.front=Q.rear=0;
24. return OK;
25.
26.}
27.int QueueLength(SqQueue Q)
28.{
29. return (Q.rear-Q.front+MaxSize)%MaxSize;
30.
31.}
32.Status EnQueue(SqQueue &Q,Dancer e)
33.{
34. if((Q.rear+1)%MaxSize==Q.front)
35. return ERROR;
36. Q.base[Q.rear]=e;
37. Q.rear=(Q.rear+1)%MaxSize;
38. return OK;
39.}
40.Status DeQueue(SqQueue &Q,Dancer &e)
41.{
42. if(Q.front==Q.rear) return ERROR;
43. e=Q.base[Q.front];
44. Q.front=(Q.front+1)%MaxSize;
45. return OK;
46.}
47.Status QueueEmpty (SqQueue Q)
48.{
49. if(Q.front==Q.rear) return OK;
50. else return ERROR;
51.}
52.Dancer GetHead(SqQueue Q)
53.{
54. if(Q.front!=Q.rear)
55. return Q.base[Q.front];
56.}
57.
58. SqQueue Mdancers,Fdancers;
59. //Dancer p;
60.
61.void DancerPartner(Dancer dancer[],int num)
62.{
63. Dancer p;
64. InitQueue(Mdancers);
65. InitQueue(Fdancers);
66. for(int i=0;i<=num;i++)
67. {
68.     p=dancer[i];
69.     if(p.sex=='F') EnQueue(Fdancers,p);
70.     else EnQueue(Mdancers,p);
71.
72. }
73. cout<<"The dancing partners are:\n";
74. while(!QueueEmpty(Mdancers) && !QueueEmpty(Fdancers))
75. {
76.     DeQueue(Mdancers,p);
77.     cout<<p.name<<" ";
78.     DeQueue(Fdancers,p);
79.     cout<<p.name<<endl;
80. }
81. if(!QueueEmpty(Fdancers))
82. {
83.     p=GetHead(Fdancers);
84.     cout<<"The first woman to get partner is:"<<p.name<<endl;
85. }else if(!QueueEmpty(Mdancers)){
86.     p=GetHead(Mdancers);
87.     cout<<"The first man to get a partner is:"<<p.name<<endl;
88. }
89.}
90.int main() {
91. int i=0;
92. fstream file;
93. Dancer *dancer;
94. dancer=new Dancer [10];
95. file.open("跳舞人员.txt");
96. if(!file){
97.     cout<<"错误!未找到文件!"<<endl;
98.                 exit(ERROR);
99.    }
100.        while (!file.eof()){
101.        file>>dancer[i].name>>dancer[i].sex;
102.        //cout<<dancer[i].name<<dancer[i].sex<<endl;
103.        i++;
104.        }
105.    DancerPartner(dancer,10);
106.    return 0;

数据结构——舞伴问题相关推荐

  1. C/C++数据结构舞伴问题

    #include "iostream" #include "string" #include "fstream" using namespa ...

  2. 舞伴问题数据结构java_Gale-Shapley算法解决舞伴问题过程详解(C++实现)

    舞伴问题是这样的:有 n 个男孩与 n 个女孩参加舞会,每个男孩和女孩均交给主持一个名单,写上他(她)中意的舞伴名字.无论男孩还是女孩,提交给主持人的名单都是按照偏爱程度排序的,排在前面的都是他们最中 ...

  3. 舞伴配对问题c语言实训报告,C语言数据结构队列实现舞伴匹配(数据结构第二次实验)...

    C语言实验作业 题目如下: 课程名称:数据结构 实验目的: 1.掌握队列的定义及实现: 2.掌握利用队列的基本操作. 实验要求: 1.    使用链式结构完成队列的各种基本操作: 2.    补充完善 ...

  4. 舞伴问题 队列 数据结构

    舞伴问题(队列) 假设在周末舞会上,男士和女士进入舞厅时,各自排成一队.跳舞开始时,依次从男队和女队的队头上各出一个配成舞伴.若两队初始人数不相同,则较长的那一队中未配对者等待下一轮舞曲. 编写程序模 ...

  5. 使用C语言完成舞伴问题(数据结构)

    题目:假定在一舞会上,男士排成一队,女士排成一队.跳舞开始时,依次从男队和女队的队头各出一人配成舞伴.若两队初始人数不相同,则较长的那一队中未配对者等待下一轮舞曲. 代码和注释如下: #define ...

  6. 【数据结构C语言-队列】舞伴配对

    /* 舞伴配对问题 来舞蹈室的顺序: 男-姓名1:男-姓名2:女-姓名3:男-姓名4: 女-姓名5:男-姓名6:男-姓名7:女-姓名8: 最终配对顺序: 男1-女3:男2-女5:男4-女8:男:男: ...

  7. 数据结构(舞伴问题)

    舞伴问题(队列) 假设在周末舞会上,男士和女士进入舞厅时,各自排成一队.跳舞开始时,依次从男队和女队的队头上各出一个配成舞伴.若两队初始人数不相同,则较长的那一队中未配对者等待下一轮舞曲. 编写程序模 ...

  8. 资料分享:送你一本《数据结构与算法JavaScript描述》电子书!

    数据结构 是掌握计算机编程必须具备的技能.通常情况下,我想掌握一门编程语言所用的方法就是利用这门语言把数据结构中线性表.栈.队列.字符串.动态数字.整数集合.树.图.搜索.排序等涉及的算法全部写一遍. ...

  9. 数据结构与算法JavaScript描述——使用队列

    1.使用队列:方块舞的舞伴分配问题 前面我们提到过,经常用队列模拟排队的人.下面我们使用队列来模拟跳方块舞的人.当 男男女女来到舞池,他们按照自己的性别排成两队.当舞池中有地方空出来时,选两个队 列中 ...

最新文章

  1. android的五大布局(layout)
  2. 进程、线程、多线程、并发、并行学习记录
  3. 【AI不惑境】移动端高效网络,卷积拆分和分组的精髓
  4. WZ132源代码有的在运果子
  5. 面试题目_数据分析SQL面试题目9套汇总
  6. full gc 次数_32. GC 是怎样工作的?
  7. CLR,通用语言运行时库
  8. HTML之我的个人主页
  9. PHP二开在线要饭网赞助系统源码开源版
  10. 小米note3如何打开usb调试
  11. 使用esp32-s2模拟实现usb多点触摸
  12. 计算机3c,计算机3C认证办理介绍
  13. FlashFXP连接ftp服务器上传下载
  14. android与iPhoneX区别,iphone8plus和iphonex区别 买iphone8plus还是iphonex好
  15. 百度域名阿里主机如何解析
  16. 【转载】eMule电驴使用从入门到精通(4)-------电驴宗旨:我为人人,人人为我
  17. 文件下载时设置文件名以及中文被转换成下划线的解决办法
  18. 2005年下半年网络工程师全省前20名
  19. 市场调研报告-全球与中国溶剂净化器市场现状及未来发展趋势
  20. Unity MVC框架之见解

热门文章

  1. Numa与Intel下一代Xeon处理器学习
  2. 路基路面工程(细粒土塑性图)
  3. 百度失去中国第一大桌面搜索引擎宝座
  4. JavaScript网页编程_API和WebAPI
  5. PMBOK(第六版) PMP笔记——《第五章 项目范围管理》
  6. 计算机控制系统的特点
  7. 手机短信中特殊字符导致链接失效的问题修复
  8. 数商云:钢铁企业以撮合模式切入B2B平台,汇聚势能实现价值最大化
  9. 战疫杯--奇奇怪怪的形状
  10. 泸西 阿庐古洞 那些你不知道的好去处