- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构(C语言)---舞伴问题
问题叙述:
在一个舞会上,男士们和女士们进入舞厅,各自排成一队。跳舞开始时,依次从男队和女队的队列头上各出一个人进行配对。若两队初始人数不同,则较长的那一队中未配对者等待下一轮舞曲。
先入队的男士或女士先出队配成舞伴,因此该问题是具有先进先出的特性,可以用队列作为算法的数据结构。
在算法中,假设男士和女士的记录存放在一个数组中作为输入,然后依次扫描该数组的各元素,并根据性别来决定是进入男队还是女队。当这两个队列构造完成之后,依次将两对当前的队头元素出队来配成舞伴,直至某队列变空为止。此时,若某队列仍有等待配对者,算法输出此队列中等待者的人数及排在队头的等待者的名字,他(或她)将是下一轮舞曲开始时第一个可获得舞伴的人。
具体代码如下:
#include fstream
#include iostream
using namespace std;
templateclass T
class CirQueue
{
private:
T *q;
int front;
int rear;
int maxSize;
public:
CirQueue(int m);
~CirQueue();
void EnQueue(T x);
T DeQueue();
T GetHead();
T GetLast();
T InitQueue();
int IsEmpty();
int IsFull();
void Clear();
};
templateclass T
CirQueueT::CirQueue(int m)
{
q =new T[m];
maxSize=m;
front=rear=0;
}
templateclass T
CirQueueT::~CirQueue()
{
delete []q;
front=rear=0;
maxSize=0;
}
templateclass T
void CirQueueT::EnQueue(T x)
{
if ((rear+1)%maxSize==front)
coutFullendl;
q[rear]=x;
rear=(rear+1)%maxSize;
}
templateclass T
T CirQueueT::DeQueue()
{
T x;
if(front==rear)cout下溢endl;
x=q[front];
front=(front+1)%maxSize;
return x;
}
templateclass T
T CirQueueT::GetHead()
{
T x;
if (front==rear)
cout队空,无队顶元素endl;
x=q[front];
return x;
}
templateclass T
T CirQueueT::GetLast()
{
T x;
if(rear==front)
cout队空,无队尾元素endl;
x=q[rear];
return x;
}
template class T
int CirQueueT::IsEmpty()
{
if (rear == front) return 1;
else return 0;
}
template class T
int CirQueueT::IsFull()
{
if ((rear+1)%maxSize == front) return 1;
else return 0;
}
struct dancer
{
char name[20];
char sex;
};
int main()
{
cout请输入舞伴总数量endl;
CirQueuedancer mdancer(10);
CirQueuedancer fdancer(10);
ifstream in(source.txt);
while(!in.eof())
{
cout请输入舞者性别(f(女)or m(男))及姓名endl;
dancer temp;
in temp.sex;
in temp.name;
if (temp.sex == f)
{
fdancer.EnQueue(temp);
}
else
{
mdancer.EnQueue(temp);
}
}
while( (!mdancer.IsEmpty())!(fdancer.IsEmpty()) )
{
cout mdancer.DeQueue().name --- fdancer.DeQueue().name endl;
}
if(!mdancer.I
您可能关注的文档
最近下载
- (库卡机器人)工业机器人编程1+X证书理论考试复习题库资料(含答案).pdf
- 基于CC2530的Zigbee无线传感网络的设计与实现.docx VIP
- 电路理论(华中科技大学)中国大学MOOC 慕课 期末考试答案.docx
- 糖尿病肾脏病基层管理指南(2023).pptx VIP
- 地质灾害护坡工程设计规范.doc
- 建党百年-少年先锋队童心向党主题班会ppt.pptx VIP
- 国家开放大学电大《民族理论与民族政策》期末题库及答案.docx
- 艾滋病病毒感染者随访工作指南(2016年版).doc
- 学堂课程在线中西经典对话(英语)(暨大)课后作业期末考试答案.docx
- 急诊PCI护理实践指南.pptx VIP
文档评论(0)