您的位置:首页 > 理论基础 > 数据结构算法

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

2017-11-12 13:45 756 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: