舞伴问题(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);
}

 

    原文作者:舞伴问题
    原文地址: https://blog.csdn.net/lb543210/article/details/53456881
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞