数据结构舞伴搭配问题完全代码

上传人:夏** 文档编号:470456813 上传时间:2023-03-03 格式:DOC 页数:6 大小:26.51KB
返回 下载 相关 举报
数据结构舞伴搭配问题完全代码_第1页
第1页 / 共6页
数据结构舞伴搭配问题完全代码_第2页
第2页 / 共6页
数据结构舞伴搭配问题完全代码_第3页
第3页 / 共6页
数据结构舞伴搭配问题完全代码_第4页
第4页 / 共6页
数据结构舞伴搭配问题完全代码_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《数据结构舞伴搭配问题完全代码》由会员分享,可在线阅读,更多相关《数据结构舞伴搭配问题完全代码(6页珍藏版)》请在金锄头文库上搜索。

1、#include#include#include#include#define queuesize 5typedef struct /定义结构体 char name20; /定义一个长度为20的字符串,用来表示姓名 char sex; /定义一个char变量sex,用来表示性别,规定m表示男性,f 表示女性 person_type; typedef struct /定义循环队列结构体队列 person_type *qBase; /储存空间基址 int front; /头指针,若队列不空,指向队列头元素 int rear; /尾指针,若队列不空,指向队列尾元素的下一个位置cir_queue; v

2、oid init_queue(cir_queue *q) /初始化循环队列 q-qBase =(person_type *)malloc(sizeof(person_type)*queuesize); /动态创建储存空间基址if(!q-qBase ) /创建失败,退出程序!printf(动态创建失败,程序终止!);exit(-1); q-front=q-rear=0; /*void traverse_queue(cir_queue *q) /遍历输出循环队列元素int i=q-front ;while(i != q-rear )/当头指针与尾指针相等时结束while循环printf(%sn,q

3、-qBasei.name );/输出元素的名字i=(i+1)%queuesize; /解决假溢出问题*/bool full_queue(cir_queue *q) /判断循环队列是否为满/当尾指针的下一个位置等于头指针时,队列为满 / 为满返回true,否则返回falseif(q-rear+1)%queuesize = q-front )return true;elsereturn false;bool empty_queue(cir_queue *q)/判断循环队列是否为空/当头指针位置等于尾指针时,循环队列为空, /为空返回true,否则返回falseif(q-front = q-rear

4、 )return true;elsereturn false;void en_queue(cir_queue *q,person_type p)/进队函数,使p进入队列 if(full_queue(q)/判断是否为满printf(队列已满,无法实现进队操作,程序终止!);exit(-1);else /不满进行操作q-qBaseq-rear = p;q-rear=(q-rear+1)%queuesize; /尾指针指向下一个位置person_type de_queue(cir_queue *q)/出队函数,用p返回出队值 person_type p; if(empty_queue(q)/判断是否

5、为空printf(队列为空,无法实现出队操作,程序终止!);exit(-1);else /不为空进行操作 p=q-qBaseq-front; q-front=(q-front+1)%queuesize; return p; int length_queue(cir_queue *q)/求循环队列元素个数return q-rear-q-front ; /尾指针位置减去头指针位置即可person_type queue_front(cir_queue *q)/访问队头元素,并返回 if(empty_queue(q)/判断是否为空printf(队列为空,操作失败!);exit(-1);return q

6、-qBaseq-front; void dancepartners(cir_queue femaledancer,cir_queue maledancer,int lun)/舞伴配对函数 int m = length_queue(&femaledancer); /计算女队人数int n = length_queue(&maledancer); /计算男队人数for(int j = 1;jn)/ 女队人数多于男队,女队有剩余队员person_type p; person_type q;person_type s;printf(-);printf(第%d轮配对情况:n,j);for(int i =

7、1;i=n;+i ) /for循环实现配对操作 p=de_queue(&maledancer); q=de_queue(&femaledancer); /出队的男女舞伴 printf(男:%s,p.name); printf(和女:%s配对成功n,q.name);/输出配对情况en_queue(&maledancer,p); en_queue(&femaledancer,q); /将出队的男女舞伴重新进队 /输出女队剩余队员情况,并输出在下一轮首先出场的队员姓名 printf(女队中还有%d个人在等待!n,m-n); s=queue_front(&femaledancer); , printf

8、(女队中第一个等待的是:%sn,s.name); else if(mn) /男队人数多于女队,男队有剩余队员 person_type p; person_type q;person_type s;printf(-); printf(第%d轮配对情况:n,j); for(int i =1;i=m;+i ) p=de_queue(&maledancer);q=de_queue(&femaledancer);/出队的男女舞伴 printf(男:%s,p.name); printf(和女:%s配对成功n,q.name);/输出配对情况en_queue(&maledancer,p); en_queue(

9、&femaledancer,q);/将出队的男女舞伴重新进队 /输出男队剩余队员情况,并输出在下一轮首先出场的队员姓名 printf(男队中还有%d个人在等待!n,n-m); s=queue_front(&maledancer); printf(男队中第一个等待的是:%sn,s.name); else /男女队人数相等,没有剩余队员person_type p; person_type q;person_type s;printf(-);printf(第%d轮配对情况:n,j); for(int i =1;i=m; +i)p=de_queue(&maledancer); q=de_queue(&

10、femaledancer); /出队的男女舞伴 printf(男:%s,p.name); printf(和女:%s配对成功n,q.name);/输出配对情况en_queue(&maledancer,p); en_queue(&femaledancer,q);/将出队的男女舞伴重新进队 printf(没有人剩余!n); void main() person_type p,dancersqueuesize; /键盘输入男女舞者的信息,包括姓名,性别 int i,num; printf(输入男女dancer的总人数:n); scanf(%d,&num); printf(输入姓名和性别(用m表示男性,

11、用f表示女性),如: nzhangsannmn); for(i=0;inum;i+) scanf(%s,&dancersi.name); getchar(); scanf(%c,&dancersi.sex); if(dancersi.sex!=f&dancersi.sex!=m)/判断输入信息是否合法 printf(第%d个人的信息有误,请重新输入,(i-)+1); cir_queue maledancer,femaledancer;/定义两个循环队列结构体 init_queue(&maledancer);/调用init_queue()函数置空队列maledancer表示男队 init_queue(&femaledancer);/调用init_queue()函数置空队列femaledancer表示女队 for(i=0;inum;i+) p=dancersi;/结构体整体赋值 if(p.sex=f

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 习题/试题

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号