数据结构课设学生搭配问题Word格式文档下载.docx

上传人:b****5 文档编号:18677913 上传时间:2022-12-31 格式:DOCX 页数:14 大小:75.89KB
下载 相关 举报
数据结构课设学生搭配问题Word格式文档下载.docx_第1页
第1页 / 共14页
数据结构课设学生搭配问题Word格式文档下载.docx_第2页
第2页 / 共14页
数据结构课设学生搭配问题Word格式文档下载.docx_第3页
第3页 / 共14页
数据结构课设学生搭配问题Word格式文档下载.docx_第4页
第4页 / 共14页
数据结构课设学生搭配问题Word格式文档下载.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

数据结构课设学生搭配问题Word格式文档下载.docx

《数据结构课设学生搭配问题Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据结构课设学生搭配问题Word格式文档下载.docx(14页珍藏版)》请在冰豆网上搜索。

数据结构课设学生搭配问题Word格式文档下载.docx

第四首:

男1和女4

二、总体结构设计:

为实现上述功能和目的,要用到循环队列的相关知识,同时,要定义一定的抽的数据类型,主函数调用各个函数模块

1.各模块函数介绍:

1)classcirularQueue

作用:

定义一个一个循环队列

2)~cirularQueue()

定义析构函数,使对象在撤销时释放

3)boolIsFull()

判断队列是否已满

4)boolIsEmpty()

判断队列是否为空,用于出队列前使用

5)voidpush(Tinfo)

入队。

每对舞伴跳完舞之后,做入队处理,到达队尾,等待下次跳舞。

6)voidPop(T&

info)

出队。

每取曲子响起时男生队列和女生队列作出队处理,两人跳舞。

7)voidGetHead(T&

取队首元素,对出队的男女进行识别。

8)voidInitqueue(cirularQueue<

int>

&

int);

初始化队列

9)voiddisplay(int,int);

根据男生和女生的人数和曲目的数目,来判断每曲歌的男女配对情况

10)voidcharge(int,int);

作用:

判断指定组合能否配对成功

2.本程序包含三个模块:

1)主程序模块:

voidmain()

{

初始化;

do{

接受命令;

处理命令;

}while(“命令”=”退出”)

}

2)、集合单元模块——实现集合的各个函数模块

3)、结点结构单元模块——定义集合的结点结构

三、各子模块设计:

1主函数调用关系图

主函数

k曲配对

每曲配对

数据输入

输出

编号

图main()

2初始化示意

图voidInitqueue(cirularQueue<

&

Q,intm)

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&

四、编程实现:

#include<

iostream>

template<

classT>

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<

maxSize-1;

i++)

push(i);

}

boolIsFull()//判断队列是否已满

{if((rear+1)%MaxSize==front)

returntrue;

elsereturnfalse;

boolIsEmpty()//判断队列是否为空

{if(front==rear)

voidpush(Tinfo)//入队

{if(IsFull())

{cout<

<

"

错误!

队列已满!

endl;

exit(-1);

else

{data[rear]=info;

rear=(rear+1)%MaxSize;

voidPop(T&

info)//出队

{if(IsEmpty())

队列为空!

{info=data[front];

front=(front+1)%MaxSize;

voidGetHead(T&

info)//取队首元素

{if(IsEmpty())

exit(-1);

};

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'

//判断是否继续输入,如果继续输入,则输入'

否则输入'

n'

while(quit!

='

请输入男生和女生的编号:

a>

b;

while((a>

m)||(b>

n))//如果输入错误

输入的编号过大,请重新输入:

}

charge(a,b);

cout<

是否继续(是请输入'

否则请输入'

):

quit;

return0;

Q,intm)//初始化队列

{for(inti=1;

=m;

(i);

voiddisplay(intm,intn)

{cirularQueue<

man(m+1);

cirularQueue<

woman(n+1);

Initqueue(man,m);

Initqueue(woman,n);

cout<

请输入曲目数:

songnum;

每曲的配对情况为:

for(intk=1;

k<

=songnum;

k++)

{intx=0,y=0;

//男生和女生的编号

(x);

//男生按顺序出对跳舞

(y);

//女生按顺序出对跳舞

第"

曲:

\t"

x<

号男生<

->

y<

号女生"

//他们在一起跳舞

//跳完舞后男生再次进入队列等在下一次跳舞

voidcharge(inta,intb)

{intcount=0;

//定义舞曲计数以记录他们能在第几曲时在一起跳舞

man1(m+1);

woman1(n+1);

Initqueue(man1,m);

Initqueue(woman1,n);

while(count<

=songnum)

{intx,y;

count++;

if((x==a)&

(y==b))

{cout<

count<

首曲:

a<

b<

break;

}

//如果他们在这个舞会上不能在一起跳舞,则输出

if(count==songnum+1)

他们在这个舞会上不可能在一起跳舞"

五、测试结果:

六、总结:

本设计采用的是循环队列的基本操作顺利的解决学生舞曲搭配问题,主要利用用循环队列的环状结构,循环地执行出列入列操作并在出队列时进行配对并输出配对情况,而整个过程不需要不需要移动元素使程序在空间复杂度上降到最小,采用指针的移动大大加快了程序的执行效率。

并且对输入进行了改进,以防止用户随意输入时出现的各种意想不到的错误。

本次程序设计中所用语言为C++,程序开始定义了类cirular,其中有头指针,尾指针及数据域等。

随之定义了析构函数,释放对象,然后进行了队列的基本操作,有队列的申明,判断队空及队满,出队,入队,其核心是display()函数和charge()函数,其中display()用于对各位同学编号和每队的输出情况,charge()用于计算已编号的同学在第几曲中进行配对。

循环队列是一种环状的队列并且对头元素指向队尾元素,学生搭配问题是典型的只有采用循环队列才能解决的问题,实验表明该算法的空间复杂度优于其他算法。

通过这次实验,我发现自己在数据结构这方面真是知之甚少,以前学习的知识也多有遗忘。

与其说这是一次学习,倒不如说这是一次检测。

所以,这次实验让我很好的认清自己对数据结构这门课学习程度如何,知道自己哪些方面还存在不足、对该学科重视程度还不够,以后要努力学习。

对一学期的学习的数据结构通过这次实训,虽然并没有掌握的非常好,但是对某些重点需要掌握和了解的还是有了深入的探讨,也让我明白学的东西再多也要学会运用,通过实例去探讨可能比理论上更容易理解。

七、参考文献

《实用数据结构基础(第二版)》陈元春等中国铁道出版社

《C++程序》 

谭浩强编著 

2004年6月第1版

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1