鱼C论坛

 找回密码
 立即注册
查看: 3595|回复: 6

[学习笔记] 数据结构:循环队列的应用--舞伴问题

[复制链接]
发表于 2021-10-16 23:11:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 划句顾 于 2021-10-17 12:48 编辑

舞伴问题
1)设置两个队列分别存放男士和女士入队者
2)假设男士和女士的记录存放在一个数组中作为输入,然后依次扫描该数组的各元素,并根据性别来决定是进入男队还是女队。
3)当这两个队列构造完成之后,依次将两队当前的队头元素出队来配成舞伴,直至某队列变空为止。
4)此时,若某队仍有等待配对者,则输出此队列中排在队头的等待者的姓名,此人将是下一轮舞曲开始时第一个可获得舞伴的人。


代码如下:
/*
*author :LaoGu
*time   :2021/10/16
*purpose:循环队列的应用:舞者配对
*/
#include<iostream>

using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 100

#define N 8   //定义舞者数量 
typedef struct{
  char name[50]; //姓名
  char sex;      //性别,‘F’表示女性,‘M’表示男性
}Person;

typedef struct{
  Person *base;
  int front;   //头指针
  int rear;    //尾指针
}SqQueue;

SqQueue Mdancers,Fdancers; //定义两个队列
//初始化函数
int InitSq(SqQueue &Q){
        Q.base = new Person [MAXSIZE];
        if(!Q.base) exit(OVERFLOW);
        Q.front = Q.rear = 0;
        return OK;
}
//判断队列是否为空
bool QueueEmpty(SqQueue Q){
  if (Q.front == Q.rear)
          return true;
  else
          return false;
}
//入队
int EnQueue(SqQueue &Q,Person e)
{
        if((Q.rear+1)%MAXSIZE == Q.front) return ERROR;
        Q.base[Q.rear] = e;
        Q.rear=(Q.rear+1)%MAXSIZE;
        return OK;
}
//出队
int DeQueue(SqQueue &Q,Person &e)
{
        if(Q.front==Q.rear) return ERROR;  //判断队列是否为空
        e = Q.base[Q.front];
        Q.front = (Q.front+1)%MAXSIZE;
        return OK;
}
//取队头元素
Person GetHead(SqQueue &Q)
{
        if(Q.front!=Q.rear) return Q.base[Q.front];
        else 
                exit(ERROR);
}

游客,如果您要查看本帖隐藏内容请回复

//主函数
int main()
{
        Person d[N]={
                {"蔡蔡",'F'},
                {"黄黄",'F'},
                {"龙龙",'F'},
                {"易烊千玺",'M'},
                {"白敬亭",'M'},
                {"高杨",'M'},
                {"刘德华",'M'},
                {"彭于晏",'M'}
        },*z=d;

    DancerPartner(z,N);

    return 0;
}


                               
登录/注册后可看大图

运行结果:
运行结果.jpg



                               
登录/注册后可看大图

或者头文件方法
注:这个可以自己输入舞者的数量和舞者的信息
/*
*author :LaoGu
*time   :2021/10/17
*purpose:循环队列的应用:舞者配对
*/
#include<iostream>
#include "link.h"    //一些队列的定义
#include "peidui.h"  //舞者配对

using namespace std;

//输入舞者信息
int Print(Person d[],int n)
{
        int j;
        cout<<"请输入舞者信息\n";
        cout<<"姓名   "<<"性别   "<<endl;
        for(j=0;j<n;j++)
        {
                cin>>d[j].name>>d[j].sex;
        }
        cout<<endl;
        return 0;
}

//主函数
int main()
{
        int n;
        cout<<"请输入参加舞会的舞者的数量:";
        cin>>n;
        cout<<endl;
        Person d[N],*z=d;

        Print(z,n);

        DancerPartner(z,n);
        return 0;
}


                               
登录/注册后可看大图

两个自己定义的头文件
一、link文件
游客,如果您要查看本帖隐藏内容请回复



                               
登录/注册后可看大图

二、peidui文件
游客,如果您要查看本帖隐藏内容请回复


                               
登录/注册后可看大图

运行结果:
1634445544(1).png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-10-17 22:17:50 | 显示全部楼层
在数组中,例如a[n]的n不能是变量,注意:n不是变量!!!  不然会出错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-2 09:01:55 | 显示全部楼层
顶了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-2 13:47:34 | 显示全部楼层

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-4-6 17:22:03 | 显示全部楼层
想看隐藏部分
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-26 23:22:42 | 显示全部楼层
1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-10-12 11:26:09 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-21 13:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表