数据结构课设学生搭配问题.docx
- 文档编号:4500692
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:17
- 大小:161.79KB
数据结构课设学生搭配问题.docx
《数据结构课设学生搭配问题.docx》由会员分享,可在线阅读,更多相关《数据结构课设学生搭配问题.docx(17页珍藏版)》请在冰豆网上搜索。
数据结构课设学生搭配问题
数据结构
课程设计报告书
班级
学号
专业
姓名
…
课题描述:
一、需求分析:
1.设计内容
一班有m个女生,有n个男生(m不等于n),现要开一个舞会.男女生分别编号坐在舞池的两边的椅子上.每曲开始时,依次从男生和女生中各出一人配对跳舞,本曲没成功配对者坐着等待下一曲找舞伴.
请设计一系统模拟动态地显示出上述过程,要求如下:
1)输出每曲配对情况
2)计算出任何一个男生(编号为X)和任意女生(编号为Y),在第K曲配对跳舞的情况.至少求出K的两个值.
3)尽量设计出多种算法及程序,可视情况适当加分
]
2.需求
本课题要对数目不等的男生女生跳舞进行搭配,设计需要解决每一首曲子
男生女生的搭配情况,要采用循环队列的模式来解决,男生和女生各在两个循环
的队列中,每首曲子开始,便在两个队首各取一人成功配对跳舞,并进入队尾,
等待下一次配对。
例如:
(3男5女情况)
第一首:
男1和女1
第二首:
男2和女2
.........
:
第四首:
男1和女4
二、总体结构设计:
为实现上述功能和目的,要用到循环队列的相关知识,同时,要定义一定的抽的数据类型,主函数调用各个函数模块
1.各模块函数介绍:
1)classcirularQueue
作用:
定义一个一个循环队列
?
2)~cirularQueue()
作用:
定义析构函数,使对象在撤销时释放
3)boolIsFull()
作用:
判断队列是否已满
4)boolIsEmpty()
作用:
判断队列是否为空,用于出队列前使用
5)voidpush(Tinfo)
作用:
入队。
每对舞伴跳完舞之后,做入队处理,到达队尾,等待下次跳舞。
6)voidPop(T&info)
作用:
出队。
每取曲子响起时男生队列和女生队列作出队处理,两人跳舞。
》
7)voidGetHead(T&info)
作用:
取队首元素,对出队的男女进行识别。
8)voidInitqueue(cirularQueue
作用:
初始化队列
9)voiddisplay(int,int);
作用:
根据男生和女生的人数和曲目的数目,来判断每曲歌的男女配对情况
10)voidcharge(int,int);
作用:
判断指定组合能否配对成功
2.本程序包含三个模块:
;
1)主程序模块:
voidmain()
{
初始化;
do{
接受命令;
处理命令;
}while(“命令”=”退出”)
—
}
2)、集合单元模块——实现集合的各个函数模块
3)、结点结构单元模块——定义集合的结点结构
三、各子模块设计:
1主函数调用关系图
{
图main()
·
2初始化示意
否
~
|
图voidInitqueue(cirularQueue
3每曲配对函数调用关系图voiddisplay(int,int)
!
否
是
%
图voiddisplay(int,int)
4第k曲配对函数调用图voidcharge(int,int)
!
{
?
图voidcharge(int,int)
4队满判断boolIsFull()
5对空判断原则boolIsEmpty()
6入队流程voidpush(Tinfo)
(
7出队流程voidPop(T&info)
(
8.取队首元素代码voidGetHead(T&info)
四、编程实现:
#include
template
"
classcirularQueue//定义一个一个循环队列
{private:
intMaxSize;
intfront;//头指针
intrear;//尾指针
T*data;
public:
cirularQueue(intMaxLength)
{MaxSize=MaxLength;
front=rear=0;
;
data=newT[MaxLength];
}
~cirularQueue()//定义析构函数,使对象在撤销时释放
{front=rear=0;
delete[]data;
}
voidInitqueue()//队列的申明
{for(inti=0;i push(i); } ) boolIsFull()//判断队列是否已满 {if((rear+1)%MaxSize==front) returntrue; elsereturnfalse; } boolIsEmpty()//判断队列是否为空 {if(front==rear) returntrue; elsereturnfalse; } { voidpush(Tinfo)//入队 {if(IsFull()) {cout<<"错误! 队列已满! "< exit(-1); } else {data[rear]=info; rear=(rear+1)%MaxSize; } } @ voidPop(T&info)//出队 {if(IsEmpty()) {cout<<"错误! 队列为空! "< exit(-1); } else {info=data[front]; front=(front+1)%MaxSize; } } # voidGetHead(T&info)//取队首元素 {if(IsEmpty()) {cout<<"错误! 队列为空! "< exit(-1); } else {info=data[front]; } } }; : voidInitqueue(cirularQueue voiddisplay(int,int); voidcharge(int,int); usingnamespacestd; staticintsongnum=0;//定义歌曲的数量并初始化为0 staticintm=0,n=0;//男生和女生的人数 intmain()//主函数 {cout<<"请分别输入男生和女生的人数: "; " cin>>m>>n; display(m,n); inta=0,b=0;//男生和女生的编号,以判断他们在第几首歌时能在一起跳舞 charquit='y';//判断是否继续输入,如果继续输入,则输入'y';否则输入'n' while(quit! ='n') {cout<<"请输入男生和女生的编号: "; cin>>a>>b; while((a>m)||(b>n))//如果输入错误 {cout<<"输入的编号过大,请重新输入: "; cin>>a>>b; … } charge(a,b); cout<<"是否继续(是请输入'y',否则请输入'n'): "; cin>>quit; } return0; } voidInitqueue(cirularQueue {for(inti=1;i<=m;i++) (i); : } voiddisplay(intm,intn) {cirularQueue cirularQueue Initqueue(man,m); Initqueue(woman,n); cout<<"请输入曲目数: "; cin>>songnum; cout<<"每曲的配对情况为: "< for(intk=1;k<=songnum;k++) ) {intx=0,y=0;//男生和女生的编号 (x);//男生按顺序出对跳舞 (y);//女生按顺序出对跳舞 cout<<"第"< \t"< (x);//跳完舞后男生再次进入队列等在下一次跳舞 (y);//跳完舞后男生再次进入队列等在下一次跳舞 } } voidcharge(inta,intb) {intcount=0;//定义舞曲计数以记录他们能在第几曲时在一起跳舞 ~ cirularQueue cirularQueue Initqueue(man1,m); Initqueue(woman1,n); while(count<=songnum) {intx,y; count++; (x); (y); (x); ( (y); if((x==a)&&(y==b))
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 学生 搭配 问题