C语言数据结构队列实现舞伴匹配(数据结构第二次实验)

C语言实验作业

题目如下:

课程名称:数据结构

实验目的:

1.掌握队列的定义及实现;

2.掌握利用队列的基本操作。

实验要求:

1、    使用链式结构完成队列的各种基本操作;

2、    补充完善教材81页的舞伴问题。

实验项目名称:队列的基本操作应用

实验过程:

1、    先建立一个舞者队列,依次往队列中添加人员信息(8个人,5男3女);

2、    分别创建男女队列;

3、    从舞者队列中依次将队首元素出队并判断其性别并添加至男队(5人)或女队(3人);

4、    分别从男队和女队出队队首元素并配对输出;(男队女队分别3人)

5、    将未完成的一队队首元素输出(男队的队首成员名称)。

实验报告中给出算法3.23的代码

 

实验结果:

输入:8人信息(A,B,C,D,E,F,G,H)

输出:The dancepartners:

A—B

      C—D

      E—F

G is waiting for a partner.

实验分析:

1.队列的操作特点;

2.列举调试运行过程中出现的错误并分析原因。

要求:

(1) 程序要添加适当的注释,程序的书写要采用缩进格式

(2) 程序要具在一定的健壮性,即当输入数据非法时,程序也能适当地做出反应。

(3) 程序要做到界面友好,在程序运行时用户可以根据相应的提示信息进行操作。

(4) 上传源程序到课堂派。顺序表的源程序保存为dancepartner.cpp



#include<stdio.h>
#define OK 1
#define ERROR 0
typedef char ElemType;
typedef int Status;
//定义一个舞伴链表
typedef struct QNode
{
	ElemType name;
	ElemType sex;
	struct QNode *next;
}QNode,*QueuePtr;
//定义一个舞伴队列 
typedef struct LQueue
{
	QueuePtr rear;
	QueuePtr front;
}LQueue,*LQueueNode;
//定义男舞伴队列以及链表 
typedef struct Man_QNode
{
	ElemType data;
	struct Man_QNode *next;
}Man_QNode,*Man_Ptr;
typedef struct Man_LQueue
{
	Man_Ptr rear;
	Man_Ptr front;
}Man_LQueue,*Man_LQueueNode;
//定义女舞伴队列以及链表 
typedef struct Woman_QNode
{
	ElemType data;
	struct Woman_QNode *next;
}Woman_QNode,*Woman_Ptr;
typedef struct Woman_LQueue
{
	Woman_Ptr rear;
	Woman_Ptr front;
}Woman_LQueue,*Woman_LQueueNode;
//初始化舞伴队列
Status Init_Queue(LQueueNode &Q)
{
	Q->front=Q->rear=new QNode;
	Q->front=NULL;
	return OK;
}
//初始化两个男女舞伴队列
Status Man_Init(Man_LQueueNode &Q1)
{
	Q1->front=Q1->rear=new Man_QNode;
	Q1->front=NULL;
	return OK;
}
Status Woman_Init(Woman_LQueueNode &Q2)
{
	Q2->front=Q2->rear=new Woman_QNode;
	Q2->front=NULL;
	return OK;
}
//进入舞伴队列的操作 
Status InQueue(LQueueNode &Q,ElemType name,ElemType sex)
{
	QueuePtr p;
	p=new QNode;
	p->name=name;
	p->sex=sex;
	if(Q->front==NULL)
	{
		Q->front=p;
	}
	p->next=NULL;
	Q->rear->next=p;
	Q->rear=p;
	return OK;	
}
//进入男女舞伴队列的操作
Status Man_InQueue(Man_LQueueNode &Q1,ElemType e)
{
	Man_Ptr p;
	p=new Man_QNode;
	p->data=e;
	p->next=NULL;
	if(Q1->front==NULL)
	{
		Q1->front=p;
	}
	Q1->rear->next=p;
	Q1->rear=p;
	return OK;	
}
Status Woman_InQueue(Woman_LQueueNode &Q2,ElemType e)
{
	Woman_Ptr p;
	p=new Woman_QNode;
	p->data=e;
	p->next=NULL;
	if(Q2->front==NULL)
	{
		Q2->front=p;
	}
	Q2->rear->next=p;
	Q2->rear=p;
	return OK;	
}
//出舞伴队列的操作
ElemType OutQueue_sex(LQueueNode &Q)  
{
	ElemType e;
	e=Q->front->sex;
	return e;
}
ElemType OutQueue_name(LQueueNode &Q)  
{
	ElemType e;
	e=Q->front->name;
	Q->front=Q->front->next;
	return e;
}
//出男女舞伴队列的操作
ElemType Man_OutQueue(Man_LQueueNode &Q1)  
{
	ElemType e;
	e=Q1->front->data;
	Q1->front=Q1->front->next;
	return e;
}
ElemType Woman_OutQueue(Woman_LQueueNode &Q2)  
{
	ElemType e;
	e=Q2->front->data;
	Q2->front=Q2->front->next;
	return e;
}
int main()
{
	LQueueNode Q;
	Man_LQueueNode Q1;
	Woman_LQueueNode Q2;
	Q=new LQueue;
	Q1=new Man_LQueue;
	Q2=new Woman_LQueue;
	Init_Queue(Q);
	Man_Init(Q1);
	Woman_Init(Q2);
	int num=0;
	int num1=0;
	int num2=0;
	char name,sex;
	char t,person;
	char boy,girl;
	//将所有舞伴置入舞伴队列 
	printf("----------提示:输入时请输入单个字符字母表示姓名,然后空格后输入M表示男,W表示女----------\n");
	while(1)
	{
		printf("请输入舞伴的名字,性别:(输入Q Q时结束)");
		scanf(" %c %c",&name,&sex);
		if(name=='Q')
		{
			break;
		}
		InQueue(Q,name,sex);
		num++;
	}
	//判断舞伴性别并分别将其置入男女舞伴队列 
	while(num!=0)
	{
		t=OutQueue_sex(Q);
		if(t=='M')
		{		
			person=OutQueue_name(Q);
			num--; 
			Man_InQueue(Q1,person);
			num1++;
		}
		if(t=='W')
		{
			person=OutQueue_name(Q);
			num--; 
			Woman_InQueue(Q2,person);
			num2++;
		}
	}
	//开始匹配
	while(1)
	{
		if(num1==0)
		{
			break;	
		}
		if(num2==0)
		{
			break;	
		}
		boy=Man_OutQueue(Q1);
		girl=Woman_OutQueue(Q2);
		num1--;num2--;
		printf("%c-----------%c\n",boy,girl);		
	}
	return 0; 
}
 

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