C语言实现舞伴问题

#include <stdio.h>

#include <stdlib.h>

#include <malloc.h>

struct Person

{

char name1[20];

char sex;//M是男性,W是女性

};

typedef struct Person Person;

typedef struct Person *Per;

typedef Per People;

struct node

{

People element;

struct node *front;

struct node *rear;

struct node *next;

};

typedef struct node *pnode;

typedef pnode QUEUE;

void makeNULL(QUEUE Q)//初始化

{

Q->front=(QUEUE)malloc(sizeof( struct node));

Q->rear=(QUEUE)malloc(sizeof( struct node));

Q->rear=Q->front;

Q->front->next=NULL;

}

int isEmpty(QUEUE Q)//判断是否为空

{

if(Q->front==Q->rear)

return 1;

else

return 0;

}

People deleteQUEUE(QUEUE Q)//删除队列元素

{

QUEUE tmp;

if(isEmpty(Q)==1)

{

return NULL;

}

else 

{

tmp=Q->front->next;

Q->front->next=tmp->next;

if(Q->front->next==NULL)

{

Q->rear=Q->front;

   }

return tmp->element;

free(tmp);

}

}

void EnQUEUE(QUEUE Q,People x)//将元素插入队列

{

QUEUE q1;

q1=(QUEUE)malloc(sizeof(struct node));

q1->element=x;

q1->next=NULL;

if(Q->front->next==NULL)

{

Q->front->next=q1;

}

Q->rear->next=q1;

Q->rear=q1;

}

People FRONT(QUEUE Q)//返回队列的头元素

{

QUEUE q1;

q1=Q->front->next;

return q1->element;

}

void OutputQUEUE(QUEUE Q)//输出队列

QUEUE q1;

 

q1=Q->front->next;

while(q1!=NULL)

printf(“姓名: %s   性别: %c\n”,q1->element->name1,q1->element->sex);

q1=q1->next;

}

}

void dancePartner(QUEUE Q,int n)

{

int i,k=0,j=0;

QUEUE Q1,Q2;//Q1为男队,Q2为女队

People p,q,t;

Q1=(QUEUE)malloc(sizeof(struct node));

Q2=(QUEUE)malloc(sizeof(struct node));

makeNULL(Q1);

makeNULL(Q2);

for(i=0;i<n;i++)

{

p=deleteQUEUE(Q);

if(p->sex == ‘M’ || p->sex == ‘m’)

{

EnQUEUE(Q1,p);//排入男队

j++;//男士数量加一

}

else

{

EnQUEUE(Q2,p);//排入女队

k++;

}

}

while(!isEmpty(Q1) && !isEmpty(Q2))

{

deleteQUEUE(Q1);

j–;//男士出队一个,数量就减一

deleteQUEUE(Q2);

k–;

}

if(!isEmpty(Q1))

{

printf(“男队剩余人数:%d\n”,j);

q=FRONT(Q1);

printf(“排在队首的人的姓名:%s\n”,q->name1);

}

else if(!isEmpty(Q2))

{

printf(“女队剩余人数:%d\n”,k);

t=FRONT(Q2);

printf(“排在队首的人的姓名:%s\n”,t->name1);

}

}

int main()

{

int i=0,n=0;

People p;

QUEUE Q;

Q=(QUEUE)malloc(sizeof(struct node));

makeNULL(Q);

printf(“输入跳舞的人的个数:\n”);

scanf(“%d”,&n);

for(i=0;i<n;i++)

{

p=(People)malloc(sizeof(struct Person));

printf(“输入名字和性别:”);

scanf(“%s %c”,&p->name1,&p->sex);

EnQUEUE(Q,p);

}

OutputQUEUE(Q);

dancePartner(Q,n);

return 0;

}

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