您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 纺织服装 > jmu-ds-舞伴问题
假设在周末舞会上,男士和女士们分别进入舞厅,各自排成一队。跳舞开始,依次从男队和女队队头各出一人配成舞伴,若两队初始人数不同,则较长那一队未配对者等待下一轮舞曲。现要求写一算法模拟上述舞伴配对问题。你需要用队列操作实现上述算法。请完成下面5个函数的操作。函数接口定义:intQueueLen(SqQueueQ);//队列长度intEnQueue(SqQueue&Q,Persone);//加入队列intQueueEmpty(SqQueue&Q);//队列是否为空intDeQueue(SqQueue&Q,Person&e);//出队列voidDancePartner(Persondancer[],intnum);//配对舞伴先输入参加舞会人数,再分别输入参加舞会人的姓名和性别输出说明先输出配对的男女舞伴,若队伍有剩人,则输出剩下人性别及剩下人数目。#includeiostream#defineMAXQSIZE100//队列可能达到的最大长度#defineOK1#defineERROR0#defineOVERFLOW-2usingnamespacestd;typedefstruct{charname[20];//姓名charsex;//性别,'F'表示女性,'M'表示男性}Person;//-----队列的顺序存储结构-----typedefstruct{Persondata[MAXQSIZE];intfront;//头指针intrear;//尾指针}Queue;typedefQueue*SqQueue;SqQueueMdancers,Fdancers;//分别存放男士和女士入队者队列intInitQueue(SqQueue&Q);voidDestroyQueue(SqQueue&q);intQueueLen(SqQueueQ);//队列长度intEnQueue(SqQueue&Q,Persone);//加入队列intQueueEmpty(SqQueue&Q);//队列是否为空intDeQueue(SqQueue&Q,Person&e);//出队列voidDancePartner(Persondancer[],intnum);//配对舞伴intmain(){inti;intn;Persondancer[MAXQSIZE];cinn;for(i=0;in;i++)cindancer[i].namedancer[i].sex;InitQueue(Mdancers);//男士队列初始化InitQueue(Fdancers);//女士队列初始化coutThedancingpartnersare:endl;DancePartner(dancer,n);if(!QueueEmpty(Fdancers)){coutF:QueueLen(Fdancers);}elseif(!QueueEmpty(Mdancers)){coutM:QueueLen(Mdancers);}DestroyQueue(Fdancers);DestroyQueue(Mdancers);return0;}intInitQueue(SqQueue&Q){//构造一个空队列QQ=newQueue;//为队列分配一个最大容量为MAXSIZE的数组空间if(!Q-data)exit(OVERFLOW);//存储分配失败Q-front=Q-rear=0;//头指针和尾指针置为零,队列为空returnOK;}voidDestroyQueue(SqQueue&q){deleteq;}intQueueLen(SqQueueQ){intcount=0;intk=Q-rear;intj=Q-front;while(k!=j){j=(j+1)%MAXQSIZE;count++;}returncount;}intEnQueue(SqQueue&Q,Persone){if(((Q-rear+1)%MAXQSIZE)==Q-front)return0;else{Q-rear=(Q-rear+1)%MAXQSIZE;Q-data[Q-rear]=e;return1;}}intQueueEmpty(SqQueue&Q){return(Q-front==Q-rear);}intDeQueue(SqQueue&Q,Person&e){if(Q-rear==Q-front)return-1;else{Q-front=(Q-front+1)%MAXQSIZE;e=Q-data[Q-front];return1;}}PersonGetHead(SqQueueQ){returnQ-data[Q-front];}voidDancePartner(Persondancer[],intnum){Personp;for(inti=0;inum;i++){p=dancer[i];if(p.sex=='F')EnQueue(Fdancers,p);elseEnQueue(Mdancers,p);}while(!QueueEmpty(Fdancers)&&!QueueEmpty(Mdancers)){DeQueue(Fdancers,p);coutp.name;DeQueue(Mdancers,p);coutp.name\n;}if(!QueueEmpty(Fdancers)){p=Mdancers-data[Mdancers-front];//GetHead(Fdancers);}elseif(!QueueEmpty(Mdancers)){p=Mdancers-data[Mdancers-front];//GetHead(Mdancers);}}
本文标题:jmu-ds-舞伴问题
链接地址:https://www.777doc.com/doc-7269332 .html