#include
#include
using namespace std;
#define MAXQSIZE 100
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef struct{
char name[20];
char sex;
}Person;
typedef Person QElemType;
typedef struct{
QElemType *base;//初始化时动态分配存储空间
int front;//头指针
int rear;//尾指针
}SqQueue;
//算法3.13 循环队列的初始化
Status InitQueue(SqQueue &Q)
{ // 构造一个空队列Q
Q.base = new QElemType[MAXQSIZE];
if(!Q.base)
{
return OVERFLOW;// 存储分配失败
}
Q.front = 0;
Q.rear = 0;
return OK;
}
//算法3.14 求循环队列的长度
int QueueLength(SqQueue Q)
{// 返回Q的元素个数,即队列的长度
return (Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;
}
//算法3.15 循环队列的入队
Status EnQueue(SqQueue &Q,QElemType e)
{// 插入元素e为Q的新的队尾元素
if((Q.rear+1)%MAXQSIZE == Q.front)
{
return ERROR;//尾指针在循环意义上加1后等于头指针,表明队满
}
Q.base[Q.rear] = e;
Q.rear = (Q.rear+1)%MAXQSIZE;
return OK;
}
//算法3.16 循环队列的出队
Status DeQueue(SqQueue &Q,QElemType &e)
{
if(Q.rear == Q.front)
{
return ERROR;
}
e = Q.base[Q.front];
Q.front = (Q.front+1)%MAXQSIZE;
return OK;
}
Status FindQueue(SqQueue &Q,QElemType &e)//找到队首的人并不出队
{
if(Q.rear == Q.front)
{
return ERROR;
}
e = Q.base[Q.front];
return OK;
}
int main()
{
SqQueue Mdancers,Fdancers;
QElemType temp;
int choose;
char na[20],se;
cout<
cout<
cout<
cout<
cout<
cout<
choose=-1;
while(choose)
{
cout<
cin>>choose;
switch(choose)
{
case 0:break;
case 1:
if(InitQueue(Mdancers)&&InitQueue(Fdancers))
cout<
break;
case 2:
cout<
cin>>na>>se;
strcpy(temp.name,na);
temp.sex=se;
if(se=='F')
if(EnQueue(Fdancers,temp))
cout<
else
cout<
else
if(EnQueue(Mdancers,temp))
cout<
else
cout<
break;
case 3:
while(QueueLength(Fdancers)&&QueueLength(Mdancers))//判断是否可以配对
{
DeQueue(Fdancers,temp);
DeQueue(Mdancers,temp);
}
if(QueueLength(Fdancers))
{
cout<
FindQueue(Fdancers,temp);
cout<
}
else if(QueueLength(Mdancers))
{
FindQueue(Mdancers,temp);
cout<
DeQueue(Mdancers,temp);
cout<
}
else
cout<
break;
default:cout<
}
}
return 0;
}