数据结构 队列算法 男女生跳舞配对问题 求指导
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);
}