一次华尔兹舞会,有男女若干人参加,男女各排一对,跳舞开始时,依次从男女队伍的对头出一人配成舞伴。若两队初始人数不同,则较长一对中未配对者等待下一轮舞曲。请写出算法模拟舞伴配对问题,显示出每队舞者的信息。
#include "stdio.h"
#include "stdlib.h"
#define MAXSIZE 100
typedef int datatype;
typedef struct{
datatype a[MAXSIZE];
int front;
int rear;
}sequence_queue;
//
/* 函数功能:队列(顺序存储)初始化 /
/ 函数参数:指向sequence_queue类型变量的指针变量sq /
/ 函数返回值:空 /
/ 文件名:seqqueue.c,函数名:init() */
//
void init(sequence_queue *sq)
{
sq->front=sq->rear=0;
}
//
/* 函数功能:判断队列(顺序存储)是否为空 /
/ 函数参数:sequence_queue类型变量sq /
/ 函数返回值:int类型。返回1表示空,0表示非空 /
/ 文件名:seqqueue.c,函数名:empty() */
//
int empty(sequence_queue sq)
{
return (sq.front==sq.rear? 1:0);
}
//
/* 函数功能:打印队列(顺序存储)的结点值 /
/ 函数参数:sequence_queue类型变量sq /
/ 函数返回值:空 /
/ 文件名:seqqueue.c,函数名:display() */
//
void display(sequence_queue sq)
{
int i;
if(empty(sq))
{
printf("\n顺序队列是空的!");
}
else
{
i=sq.front;
while(i!=sq.rear)
{
printf("%5d",sq.a[i]);
i=(i+1)%MAXSIZE;
}
}
}
//
/* 函数功能:取得队列(顺序存储)的队首结点值 /
/ 函数参数:sequence_queue类型变量sq /
/ 函数返回值:datatype类型。返回队首结点值 /
/ 文件名:seqqueue.c,函数名:get() */
//
datatype get(sequence_queue sq)
{
if(empty(sq))
{
printf("\n顺序队列是空的!无法获得队首结点值!");
exit(1);
}
return sq.a[sq.front];
}
//
/* 函数功能:队列(顺序存储)的插入(进队)操作 /
/ 函数参数:指向sequence_queue类型变量的指针变量sq /
/ datatype类型的变量x /
/ 函数返回值:空 /
/ 文件名:seqqueue.c,函数名:insert() */
//
void insert(sequence_queue *sq,datatype x)
{
int i;
if((sq->rear+1)%MAXSIZE==sq->front)
{
printf("\n顺序队列是满的!");
exit(1);
}
sq->a[sq->rear]=x;
sq->rear=(sq->rear+1)%MAXSIZE;
}
//
/* 函数功能:队列(顺序存储)的删除(出队)操作 /
/ 函数参数:指向sequence_queue类型变量的指针变量sq /
/ 函数返回值:空 /
/ 文件名:seqqueue.c,函数名:dele() */
/*/
datatype dele(sequence_queue *sq)
{
datatype x;
if(sq->front==sq->rear)
{
printf("\n顺序队列是空的!不能做删除操作!");
exit(1);
}
x=sq->a[sq->front];
sq->front=(sq->front+1)%MAXSIZE;
return x;
}
void DancePartner()
{
//将子函数补充完整
//输入舞者时,用5位整数表示舞者信息,最高位表示男女,1为男,2为女
}
int main()
{
DancePartner();
return 0;
}
输入格式:
输入一系列男舞者和女舞者。用5位整数表示舞者信息,最高位表示男女,1为男,2为女。
输出格式:
输出本支曲目跳舞的男女舞伴,同时输出下一首舞曲等待的舞者。
输入样例:
10001 20001 10002 20008 20006 0
输出样例:
请输入舞者信息:
本支曲目跳舞的男女舞伴为:
10001——20001
10002——20008
下首舞曲等待的女士是:20006