舞伴问题(2)

#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;
	}
	else return 0;
}

void initqueue(sequeue **p)     //初始化 
{
	*p=(sequeue*)malloc(sizeof(sequeue));
	if((*p)!=NULL)
	{
		(*p)->first=max-1;
		(*p)->last=max-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];
	return x;
}


void Enqueue(sequeue *p,Person x)//入队 
{
	if((p->last+1)%max==p->first)
	{
		printf("队列已满\n");
	    getch();
	}
	else
	{
		p->last=(p->last+1)%max;
		p->date[p->last]=x;	
	}
}

Person outqueue(sequeue *p)     //出队 
{
	Person x;
	if(empty(p))
	{
		printf("队列为空\n");
	}
	else
	{
		p->first=(p->first+1)%max;
		x=p->date[p->first];
		return x;
	}
}

void wuban(Person dancer[],int num,int sum)
{
	int i,j;
	Person p;
	sequeue *man,*women;
	initqueue(&man);
	initqueue(&women);
	for(j=0;j<sum;j++)
	{ 
	    printf("\n第%d支舞曲配对的结果:",j+1);
		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----配对结果----\n"); 
		while(!empty(man)&&!empty(women))
		{
			p=outqueue(women);
			printf("%s",p.name);
			p=outqueue(man);
			printf("   =====   %s\n",p.name);
		} 
		getch();
		if(!empty(women))
		{
			p=gethead(women); 
			printf("可在下一轮获得舞伴的是:");
			printf("%c  %s\n",p.sex,p.name);
			printf("-------------------------------");
			getch();
		}	
		else if(!empty(man))
		{
			p=gethead(man);
			printf("可在下一轮获得舞伴的是:");
			printf("%c  %s\n",p.sex,p.name);
			printf("-------------------------------");
			getch();
		}	
	}
}
void main()
{	
    int i;
	int num,sum;
	sequeue *p;
    Person dancer[30];
    printf("请输入跳舞的人数:");
	scanf("%d",&num); 
	printf("请输入舞曲共有多少支:");
	scanf("%d",&sum);
	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,sum);
    freequeue(&p);
}

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值