标题:数据结构 队列算法 男女生跳舞配对问题 求指导
取消只看楼主
约束小朋友
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2013-5-28
结帖率:85.71%
已结贴  问题点数:20 回复次数:1 
数据结构 队列算法 男女生跳舞配对问题 求指导
1.男生和女生依次排队,排在对头的男生和排在对头的女生先配对,舞曲结束排到各自的队尾。因此该问题具体有典型的先进先出特性,可用队列作为数据的存储方式。
2.算法需要两个队列,分别是存放男生队列和女生队列,每跳一支舞曲则是一次男女队列的出队列和入队列。
3.初始化时男生、女生队列的值分别为他们的编号序列。
4.解决实验内容的问题,只需运用循环语句,执行K次入队出队即可,第K次出队列的数据对就是配对的情况。

以下是我自己写的程序
我编译 组建什么的 系统都说我没问题
但是当我输入Input count of girls:6
Input count of boys:9
Input the song number:20

输出就会变成FULL!
而且一直输出
我比对过书本 我子程序 是没问题的
但是就是不知道为什么会跟预期的结果不一样

我已经写了两个星期了 求高人指点

#include

struct node
{
  int elem[80];
  int front;
  int rear;
};
typedef struct node Queue;

Queue InitQ()
{
  Queue Q;
  Q.front=0;
  Q.rear=0;
  return(Q);
}

Queue InserQ(Queue Q,int x)
{
 if((Q.rear+1)%80!=Q.front)
 {
 Q.elem[Q.rear]=x;
 Q.rear=(Q.rear+1)%80;
 }
 else
 
printf("Full!");
 
return(Q);
}

Queue DeleteQ(Queue Q)
{
   if(Q.rear!=Q.front)
   {
    Q.front=(Q.front+1)%80;
   }
    else
   {
    printf("NULL!");
    }
   return(Q);
}

void main()
{
   Queue Q,Q2;
   int b,g,k,i,j,t,s;
   Q=Q2=InitQ();
   printf("Input count of girls:");
   scanf("%d",&g);
   printf("Input count of boys:");
   scanf("%d",&b);
   printf("Input the song number:");
   scanf("%d",&k);
   for(i=1;i<=b;i++)
   {
    Q=InserQ(Q,i);
   }
   for(j=1;j<=g;i++)
   {
      Q2=InserQ(Q2,j);
   }
   i=0;
   while(i!=k){
   t=Q.elem[Q.front];
   Q=DeleteQ(Q);
   Q=InserQ(Q,t);
   s=Q2.elem[Q2.front];
   Q2=DeleteQ(Q2);
   Q2=InserQ(Q2,s);
   i++;
   }
   printf("Result:This is %d's girl and %d's boy dance!",s,t);

}
搜索更多相关主题的帖子: count 男女生 
2013-10-30 13:04
约束小朋友
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2013-5-28
得分:0 
回复 2楼 MissingLCY
我的思路是这样的 用for循环进行编号
第一个队列的循环 用i
为了区分两个队列 第二个队列循环用J
2013-10-30 14:50



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-422771-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.325261 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved