数据结构——舞伴问题
//库函数的引用
#include <stdio.h>
#include <stdlib.h>
//宏定义
#define MAXQSIZE 100
#define OVERFLOW -2
#define OK 1
#define ERROR 0
//数据类型的重命名,定义
typedef struct
{
char name[20];
char sex;
}QElemType;
typedef int Status;
typedef struct
{
QElemType *base;
int front;
int rear;
}SqQueue;
//函数声明
Status InitQueue(SqQueue &Q);
Status EnQueue(SqQueue &Q, QElemType e);
Status DeQueue(SqQueue &Q, QElemType &e);
int QueueEmpty(SqQueue Q);
QElemType GetHead(SqQueue Q);
void DancePartner(QElemType dancer[],int num);
//主函数
int main(int argc, char *argv[])
{
SqQueue Q;
QElemType e;
QElemType dancer[5] = {{"liLei",'F'},
{"ZhangJie",'F'},
{"liMei",'M'},
{"luLin",'F'},
{"WangLei",'M'},
};
if( OK == InitQueue(Q))
printf("初始化成功!\n");
/*for( i = 0; i < 5; i ++)
{
scanf("%s", dancer[i]);
scanf("%c", dancer[i]);
}*/
DancePartner(dancer, 5);
return 0;
}
/*----------------------自定义函数---------------------*/
Status InitQueue(SqQueue &Q)
{
Q.base = new QElemType[MAXQSIZE];
if(!Q.base)
exit(OVERFLOW);
Q.front = 0;
Q.rear = 0;
return OK;
}
Status EnQueue(SqQueue &Q, QElemType e)
{
//判满
if((Q.rear + 1) % MAXQSIZE == Q.front)
return ERROR;
//入队
Q.base[Q.rear] = e;
//rear ++
Q.rear = (Q.rear + 1) % MAXQSIZE;
return OK;
}
Status DeQueue(SqQueue &Q, QElemType &e)
{
//判空
if(Q.rear == Q.front)
return ERROR;
//出队
e = Q.base[Q.front];
//front ++
Q.front = (Q.front + 1) % MAXQSIZE;
return OK;
}
int QueueEmpty(SqQueue Q)
{
if(Q.front == Q.rear)
return 1;
else
return 0;
}
QElemType GetHead(SqQueue Q)
{
if(!QueueEmpty(Q))
return Q.base[Q.front];
}
void DancePartner(QElemType dancer[],int num)
{//结构数组dancer中存放跳舞的男女,num是跳舞的人数。
SqQueue Mdancers, Fdancers;
QElemType p;
InitQueue(Mdancers); //男士队列初始化
InitQueue(Fdancers); //女士队列初始化
for(int 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("%20s ", p.name); //输出出队女士姓名
DeQueue(Mdancers, p); //男士出队
printf("%20s\n", p.name); //输出出队男士姓名}
if(!QueueEmpty(Fdancers))
{
//女士队列非空,输出队头女士的姓名
p = GetHead(Fdancers); //取女士队头
printf("The first woman to get a partner is:%s\n", p.name);
}
else if(!QueueEmpty(Mdancers))
{//男士队列非空,输出队头男士的姓名
p = GetHead(Mdancers); //取男士队头
printf("The first man to get a partner is:%s\n", p.name);
}
}
}
...全文
相关推荐
数据结构队列舞伴问题
一轮舞伴配对问题,输出配对情况及下一轮第一个待配对的人
C++数据结构实验:解决舞伴配对问题
int data;// 存储数据// 指向下一个节点的指针链表通过指针将一系列分散存储的节点连接起来,这种非连续的存储方式带来了一定的灵活性。与数组相比,链表在插入和删除操作上具有更高的效率,因为这些操作只需改变相关节点的指针,无需移动其他节点。编程技巧是一个广泛的概念,它包括代码编写习惯、数据结构的选择、算法的实现以及代码优化等多个方面。在解决具体问题时,一些关键的编程技巧包括:代码的可读性和可维护性数据结构的适用场景选择算法实现的效率分析调试和性能优化。
数据结构——舞伴问题(C++)
程序设计数据结构——舞伴问题(C++) 。。。。。。。。。。。。
数据结构(C语言版)中,舞伴问题
数据结构(C语言版)中,队列的应用问题,用两个循环队列实现舞伴问题。
C++数据结构实验 舞伴问题
C++舞伴问题 数据结构的实验,代码仅供参考


