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

来源:互联网 发布:2016热门词汇网络词汇 编辑:程序博客网 时间:2024/06/06 06:53

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 0typedef 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; } 



原创粉丝点击