数据结构(C++语言)---舞伴问题.doc

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档