「已注销」 2022-10-13 16:09 采纳率: 79.3%
浏览 76
已结题

c语言数据结构的舞会问题

问题:对于舞伴配对问题,先人队的男士或女士先出队配成舞伴,因此设置两个队列分别存放男士和女士人队者。假设男士和女士的记录存放在一个数组中作为输人,然后依次扫描该数组的各元素,并根据性别来决定是进入男队还是女队。当这两个队列构造完成之后,依次将两队当前的队头元素出队来配成舞伴,直至某队列变空为止。此时,若某队仍有等待配对者,则输出此队列中排在队头的等待者的姓名,此人将是下一轮舞曲开始时第一个可获得舞伴的人。
已经写了一部分,希望能办我修改和补充一下代码,以完善上面的功能


 
#include<stdio.h>
#include<stdlib.h>
 
type struct
{
    char name[20];
    char sex;
}Person;
 
#define MAXQSIZE 100
typedef struct
{
    Person *base;
    int front;
    int rear;
}SqQueue;
SqQueue Mdancers,Fdancers;
 
Status InitQueue(SqQueue &Q)
{
    Q.base=new QElemType[MAXQSIZE];
    if(!Q.base)
        exit (OVERFLOW);
    Q.front =Q.rear=0;
    return OK
}
 
void DancePartner(Person dancer[],int num)
{
    InitQueue(Mdancers);
    InitQueue(Fdancers);
    for(i=0;i<num;i++)
    {
        p=dancer[i];
        if(p.sex=='F')
             EnQueue(Fdancer,p);
        else
             EnQueue(Mdancers,p);
    }
    cout<<"the dancing partners are:\n;
    while(!QueueEmpty(Fdancers)&&!QueueEmpty(Mdancers))
    {
        DeQueue(Fdancers,p);
        cout<<p.name<<" ";
        DeQueue(Mdancers,p);
        cout<<p.name<<endl;
    }
    if(!QueueEmpty(Fdancers));
    {
        p=GetHead(Mdancers)
        cout<<"the first man to get a partner is:"<<p.name<<endl;
    }
}
int main()
{
   
}
  • 写回答

4条回答 默认 最新

  • 关注

    你这代码C和C++混杂,代码修改如下:
    运行结果:

    img

    代码:

    #define _CRT_SECURE_NO_WARNINGS
    
    
    #include <stdio.h>
    #include <stdlib.h>
    
    #define MAXQSIZE 100
    typedef int Status;
    #define OK 1
    #define OVERFLOW -1
    
    
    
    typedef struct
    {
        char name[20];
        char sex;
    }Person;
    
    
    typedef struct
    {
        Person* base;
        int front;
        int rear;
    }SqQueue;
    
    SqQueue Mdancers, Fdancers;
    
    Status InitQueue(SqQueue* Q)
    {
        Q->base = (Person*)malloc(sizeof(Person) * MAXQSIZE);
        if (!Q->base)
            return OVERFLOW;
        Q->front = Q->rear = 0;
        return OK;
    }
    //入队
    Status EnQueue(SqQueue* Q, Person p)
    {
        if (Q->rear == MAXQSIZE - 1)
            return OVERFLOW;
        Q->base[Q->rear] = p;
        Q->rear++;
        return OK;
    }
    //出队
    Status DeQueue(SqQueue* Q, Person* p)
    {
        if (Q->front == Q->rear)
            return OVERFLOW;
        *p = Q->base[Q->front];
        Q->front++;
        return OK;
    }
    
    //判断队列是否为空
    int QueueEmpty(SqQueue Q)
    {
        if (Q.front == Q.rear)
            return 1;
        else
            return 0;
    }
    
    //获取队列的第一个元素
    Person GetTop(SqQueue Q)
    {
        Person p = Q.base[Q.front];
        return p;
    }
    
    
    void DancePartner(Person dancer[], int num)
    {
        int i;
        Person p;
        InitQueue(&Mdancers);
        InitQueue(&Fdancers);
        for (i = 0; i < num; i++)
        {
            p = dancer[i];
            if (p.sex == 'F')
                EnQueue(&Fdancers, p);
            else
                EnQueue(&Mdancers, p);
        }
        printf("the dancing partners are:\n");
        while (!QueueEmpty(Fdancers) && !QueueEmpty(Mdancers))
        {
            DeQueue(&Fdancers, &p);
            printf("%s ", p.name);
            DeQueue(&Mdancers, &p);
            printf("%s\n", p.name);
        }
        if (!QueueEmpty(Fdancers))
        {
            p = GetTop(Fdancers);
            printf("the first woman to get a partner is:%s\n", p.name);
        }
        if (!QueueEmpty(Mdancers))
        {
            p = GetTop(Mdancers);
            printf("the first man to get a partner is:%s\n", p.name);
        }
    }
    int main()
    {
        Person ps[] = { {"ZhangSan",'M'},{"LiLi",'F'},{"ZhaoQian",'F'},{"WangJuan",'F'},{"WangGang",'M'} };
        DancePartner(ps, 5);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 11月2日
  • 已采纳回答 10月25日
  • 创建了问题 10月13日

悬赏问题

  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法