资源描述:
《舞伴问题(队列).doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、舞伴问题(队列的实现)有m个男学生,n个女学生,各排成一队(即男的排一队,女的排一队),有s首歌曲,这s首循环播放,每一首开始时,男队的第一个人与女队的第一个人配对跳舞,结束后回排到队尾继续排队。由老师决定什么时候跳舞停止。用户输入:mns输出:第几首歌曲几号男生与几号女生配对条件查询:第N首歌曲播放时男女配对的所有情况X号男生于Y号女生配对的所有歌曲编号输出所有的可能情况代码如下:Main.c文件#include#include#include"QueueLink.h"voidmain(){QueueLinkmq,nq;E
2、lemTypeme,ne,a,b;inti,m,n,s;//m男生,n女生,s歌曲数intN,X,Y;charkey;printf("分别输入男生数,女生数,歌曲数:");scanf("%d%*c%d%*c%d",&m,&n,&s);InitQueue(&mq);InitQueue(&nq);for(i=1;i<=m;i++)EnQueue(&mq,i);for(i=1;i<=n;i++)EnQueue(&nq,i);do{//首先让歌曲从头到尾播放一轮,输出配对情况for(i=1;i<=s;i++){DeleteFront(&mq,&me);DeleteF
3、ront(&nq,&ne);EnQueue(&mq,me);EnQueue(&nq,ne);printf("第%d首歌曲%d号男生与%d号女生配对",i,me,ne);}//进行查询printf("是否查询?Y/N:");fflush(stdin);key=getchar();while(key=='Y'){printf("1.查询第N首歌曲的男女配对情况2.查询X号男生与Y号女生配对的歌曲目录3.查询所有可能情况");fflush(stdin);scanf("%c",&key);//第一个条件查询if(key=='1'){printf("输
4、入N:");fflush(stdin);scanf("%d",&N);GetElem(&mq,&a);//记下此时排在第一个学生的号GetElem(&nq,&b);do{for(i=1;i<=s;i++)//播放完一轮歌曲{DeleteFront(&mq,&me);EnQueue(&mq,me);DeleteFront(&nq,&ne);EnQueue(&nq,ne);if(i==N)printf("第%d首歌曲%d号男生与%d号女生配对",N,me,ne);}GetElem(&mq,&me);GetElem(&nq,&ne);}while((a!=me
5、)
6、
7、(b!=ne));//直到与开始查找时的情况相同}//第二个条件查询elseif(key=='2'){printf("输入XY的值:");fflush(stdin);scanf("%d%*c%d",&X,&Y);printf("%d号男生与%d号女生配对跳舞的歌曲目如下:",X,Y);GetElem(&mq,&a);GetElem(&nq,&b);do{for(i=1;i<=s;i++){DeleteFront(&mq,&me);DeleteFront(&nq,&ne);EnQueue(&mq,me);EnQueue(&nq,ne);if((me=
8、=X)&&(ne==Y))printf("第%d首歌曲",i);GetElem(&mq,&me);GetElem(&nq,&ne);}}while((a!=me)
9、
10、(b!=ne));}//第三个条件查询elseif(key=='3')//查询所有可能情况{printf("所有的可能情况如下:");GetElem(&mq,&a);GetElem(&nq,&b);do{for(i=1;i<=s;i++){DeleteFront(&mq,&me);DeleteFront(&nq,&ne);EnQueue(&mq,me);EnQueue(&nq,ne);pri
11、ntf("第%d首歌曲%d号男生与%d号女生配对",i,me,ne);GetElem(&mq,&me);GetElem(&nq,&ne);}}while((a!=me)
12、
13、(b!=ne));}//回到查询菜单,询问是否继续查询printf("是否查询?Y/N:");fflush(stdin);key=getchar();}//询问是否继续跳舞printf("是否继续跳舞Y/N:");fflush(stdin);key=getchar();if(key=='Y'){printf("输入歌曲数目:");fflush(stdin);scanf("%d"
14、,&s);}}while