#include<stdio.h>
#include<malloc.h>
typedef struct Qnode//定义一个结构体 结点类型
{
int data; //定义数结点据域
struct Qnode *next;//定义结点指针域
}Qnode,*Queueptr; //队列节点
typedef struct
{
Queueptr front;
Queueptr rear;
}Linkqueue; // 队列
void Initqueue(Linkqueue*Q)//建立一个空队列
{
Q->front=Q->rear=(Queueptr)malloc(sizeof(Qnode));//为指针Q分配地址
if(Q->front)
Q->front->next=NULL;//定义队列为空
}
void Enqueue(Linkqueue*Q,int m)//入队列
{
Queueptr p;//定义节点p
p=(Queueptr)malloc(sizeof(Qnode));//为p分配地址
if(p)
{
p->data=m;
p->next=NULL;
Q->rear->next=p;//rear的next域指向新结点
Q->rear=p;//指向链尾表端
}
}
int Dequeue(Linkqueue*Q,int m)//出队列
{
Queueptr p;
if(Q->rear!=Q->front)
{
p=Q->front->next;//p指针前移
m=p->data;//出对数据传出去
Q->front->next=p->next;
}
if(Q->front==p)
Q->rear=Q->front;
free(p);
return m;
}
void printM(Linkqueue *M,int i)
{
//打印第i首曲子男生情况
Qnode *p;
int count=1;
while(count<i)
{
printf("_ ");
count++;
}
p=M->front->next;
while(M->rear!=p)
{
printf("%d ",p->data);
p=p->next;
}
printf("%d \n",p->data);
}
void printW(Linkqueue *W,int i)
{
//打印第i首曲子女生情况
Qnode *p;
int count=1;
while(count<i)
{
printf("_ ");
count++;
}
p=W->front->next;
while(W->rear!=p)
{
printf("%d ",p->data);
p=p->next;
}
printf("%d \n",p->data);
}
int main()
{
int i,m,n,k,a,b,c,d,num=0,r=0;
int arr[10];
int res=0;
Queueptr p,q;
Linkqueue M,W;//男女队列
printf("----------------------\n");
printf("-----学生搭配问题-----\n");
printf("----------------------\n");
printf("请输入男生的数量:");
scanf("%d",&n);
printf("请输入女生的数量:");
scanf("%d",&m);
printf("请输入曲子的数量:");
scanf("%d",&k);
printf("请输入要查找的男生编号:");
scanf("%d",&a);
printf("请输入要查找的女生编号:");
scanf("%d",&b);
Initqueue(&M);
Initqueue(&W);
for(i=1;i<=m;i++)
Enqueue(&W,i);//女生入队
for(i=1;i<=n;i++)
Enqueue(&M,i);//男生入队
for(i=1;i<=k;i++)
{
printf("\n\n现在正在播放第%d首曲子!\n",i);
printM(&M,i);
printW(&W,i);
p=M.front->next;
q=W.front->next;
c=Dequeue(&M,i);
d=Dequeue(&W,i);
printf("现在正在跳舞的是第%d号男生和第%d号女生!\n",c,d);
if(c==a&&b==d)
{
r=1;
num++;
arr[res]=i;
res++;
printf("第%d号男生和%d号女生在第%d首曲子一起跳舞!\n",a,b,i);
}
Enqueue(&M,c);
Enqueue(&W,d);
}
if(r==0)
printf("\n您要查找的%d号男生和%d号女生没有在一起跳舞!\n",a,b);
if(r==1)
printf("\n您要查找的%d号男生和%d号女生一起跳舞的次数为:%d次\n",a,b,num);
for(i=0;i<res;i++)
{
if(i==0)
printf("歌曲数目是: ");
printf("%d ",arr[i]);
}
}