1. 利用循环队列模拟舞伴配对问题:在舞会上,男、女各自排成一队。舞会开始时。依次从男队和女队的队头各出一人配成舞伴。如果两队初始人数不等,则较长的那一队中未配对者等待下一轮舞曲。
2. 从键盘输入舞会的轮数,并输入初始的男、女人数,使人数固定。试模拟解决上述舞伴配对问题。要求:从屏幕输出每一轮舞伴配对名单,如果在该轮中有未配对的,能够从屏幕中显示等待的未配对者的姓名。
实验代码框架:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
typedef struct Node
{
char name[10];
struct Node *next;
}QNode;
typedef struct
{
QNode *front;
QNode *rear;
}LinkQueue;
int InitQueue(LinkQueue &Q) //构建带头结点的空队列
{
Q.front=(QNode *)malloc(sizeof(QNode));
if(Q.front!=NULL)
{
Q.front->next=NULL;
Q.rear=Q.front;
}
return OK;
}
int EnQueue(LinkQueue &Q,char *str) //将字符串入队
{
QNode *p;
p=(QNode *)malloc(sizeof(QNode));
strcpy(p->name,str);
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
return OK;
}
int DeQueue(LinkQueue &Q,char *str) //出队
{
QNode *p;
p=Q.front->next;
strcpy(str,p->name);
Q.front->next=p->next;
Q.rear->next=p; //结点出队后连到队列后方,形成循环
Q.rear=p;
Q.rear->next=NULL;
return OK;
}
int VisitQueue(LinkQueue Q) //访问队列元素
{
QNode *p;
if(Q.front->next==NULL)
return ERROR;
p=Q.front->next;
while(p!=NULL)
{
printf("%s->",p);
p=p->next;
}
printf("NULL\n");
return OK;
}
void Party(LinkQueue &Q1,LinkQueue &Q2)
{
InitQueue(Q1);
InitQueue(Q2);
char str[10],boy[10],girl[10];
int b,g,ls,i,j,k,l; //b为男生人数,g为女生人数,ls为轮数
/*
在此处补充完整代码,使Party()函数完整
*/
}
void main()
{
LinkQueue Q1,Q2;
Party(Q1,Q2);
}