#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define max 100
typedef struct
{
char name[20];
char sex;
}Person;
typedef struct
{
Person date[max];
int first;
int last;
}sequeue;
int empty(sequeue *p) //是否为空
{
if(p->first==p->last)
{
return 1;
}
return 0;
}
void initqueue(sequeue **p) //初始化
{
*p=(sequeue*)malloc(sizeof(sequeue));
if((*p)!=NULL)
{
(*p)->first=-1;
(*p)->last=-1;
}
else
{
printf("memory overflow!\n");
exit (0);
}
}
void freequeue(sequeue **p)
{
if(*p==NULL)
{
printf("memory is freed\n");
}
else
{
free(*p);
}
}
Person gethead(sequeue *p) //取队头
{
Person x;
if(empty(p))
{
printf("queue is free\n");
}
x=p->date[p->first+1];
getch();
return x;
}
void Enqueue(sequeue *p,Person x)//入队
{
if(p->last==max-1)
{
printf("队列已满\n");
getch();
}
else
{
p->last++;
p->date[p->last]=x;
}
}
Person outqueue(sequeue *p) //出队
{
Person x;
if(empty(p))
{
printf("队列为空\n");
}
else
{
p->first++;
x=p->date[p->first];
return x;
}
}
void wuban(Person dancer[],int num)
{
int i;
Person p;
sequeue *man,*women;
initqueue(&man);
initqueue(&women);
for(i=0;i<num;i++)
{
p=dancer[i];
if(p.sex=='F'||p.sex=='f') Enqueue(women,p);
else Enqueue(man,p);
}
printf("----配对结果----\n");
while(!empty(man)&&!empty(women))
{
p=outqueue(women);
printf("%s",p.name);
p=outqueue(man);
printf(" ===== %s\n",p.name);
}
if(!empty(women))
{
p=gethead(women);
printf("可在下一轮获得舞伴的是:");
printf("%s",p.name);
}
else if(!empty(man))
{
p=gethead(man);
printf("可在下一轮获得舞伴的是:");
printf("%s",p.name);
}
}
void main()
{
int i;
int num;
sequeue *p;
Person dancer[30];
printf("请输入跳舞的人数:");
scanf("%d",&num);
for(i=0;i<num;i++)
{
printf("请输入舞者的姓名:");
scanf("%s",dancer[i].name);
printf("请输入舞者的性别:");
scanf("%c%c",&dancer[i].sex,&dancer[i].sex);
}
wuban(dancer,num);
freequeue(&p);
}
舞伴问题
最新推荐文章于 2023-10-17 10:06:04 发布