0
点赞
收藏
分享

微信扫一扫

学生配对问题

读思意行 2022-04-15 阅读 27
数据结构

    #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]);
     }
    } 
    
 

举报

相关推荐

0 条评论