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

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日

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵