数据结构课设学生搭配问题_第1页
数据结构课设学生搭配问题_第2页
数据结构课设学生搭配问题_第3页
数据结构课设学生搭配问题_第4页
数据结构课设学生搭配问题_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数据结构课程设计报告书班级学号专业姓名课题描述:一、 需求分析:1. 设计内容一班有m个女生,有n个男生(m不等于n),现要开一个舞会.男女生分别编号坐在 舞池的两边的椅子上 . 每曲开始时 , 依次从男生和女生中各出一人配对跳舞 , 本曲 没成功配对者坐着等待下一曲找舞伴 .请设计一系统模拟动态地显示出上述过程 , 要求如下 :1)输出每曲配对情况2)计算出任何一个男生(编号为X)和任意女生(编号为Y),在第K曲配对跳舞的 情 况. 至少求出 K 的两个值 .3)尽量设计出多种算法及程序 , 可视情况适当加分2. 需求本课题要对数目不等的男生女生跳舞进行搭配,设计需要解决每一首曲子男生女生的

2、搭配情况,要采用循环队列的模式来解决,男生和女生各在两个循环的队列中,每首曲子开始,便在两个队首各取一人成功配对跳舞,并进入队尾, 等待下一次配对。例如:(3男 5 女情况)第一首:男 1 和女 1第二首:男 2 和女 2第四首:男 1 和女 4总体结构设计:为实现上述功能和目的, 要用到循环队列的相关知识, 同时, 要定义一定的抽的数据类型,主函数调用各个函数模块1. 各模块函数介绍:1) class cirularQueue 作用:定义一个一个循环队列2) cirularQueue() 作用:定义析构函数,使对象在撤销时释放3) bool IsFull() 作用:判断队列是否已满4) bo

3、ol IsEmpty()作用:判断队列是否为空,用于出队列前使用5) void push(T info) 作用:入队。每对舞伴跳完舞之后,做入队处理,到达队尾,等待下次跳舞。6) void Pop(T &info) 作用:出队。每取曲子响起时男生队列和女生队列作出队处理,两人跳舞。7) void GetHead(T &info) 作用:取队首元素,对出队的男女进行识别。8) void Initqueue(cirularQueue&,int); 作用:初始化队列9) void display(int,int);作用:根据男生和女生的人数和曲目的数目,来判断每曲歌的男女配对情况10 ) void

4、charge(int,int); 作用:判断指定组合能否配对成功2. 本程序包含三个模块:1) 主程序模块:void main()初始化;do接受命令;处理命令;while( “命令”=”退出”)2)、集合单元模块一一实现集合的各个函数模块3)、结点结构单元模块一一定义集合的结点结构三、各子模块设计:1主函数调用关系图图 main()2初始化示意图 void Initqueue(cirularQueue &Q,int m)3每曲配对函数调用关系图void display(int,int)图 void display(int,int)4第k曲配对函数调用图void charge(int,int)

5、count+输出他们不会一起跳(x=a)&(y=b)初始化男女 循环队列(y)coun t=s ongn(x)(y)(x)end男a女b第count跳1break图 void charge(int,int)4 队满判断 bool IsFull()5对空判断原则 bool lsEmpty()6 入队流程 void push(T info)7 出队流程 void Pop(T &info)8.取队首元素代码 void GetHead(T &info)四、 编程实现:#in cludetemplate class cirularQueue /定义一个一个循环队列 private:int MaxSize

6、;int front; /头指针int rear;/尾指针T *data;public:cirularQueue(i nt MaxLe ngth) MaxSize=MaxLe ngth;fron t=rear=0;data=new TMaxLe ngth;cirularQueue() /定义析构函数,使对象在撤销时释放 fron t=rear=0;delete data;void In itqueue() /队列的申明 for(int i=0;imaxSize-1;i+)push(i);bool IsFull() / 判断队列是否已满 if(rear+1)%MaxSize=front)retu

7、rn true;else return false;bool IsEmpty() / 判断队列是否为空 if(front=rear)return true;else return false;void push(T info) / 入队 if(IsFull() cout 错误!队列已满! endl; exit(-1);else datarear=info;rear=(rear+1)%MaxSize;void Pop(T &info) / 出队 if(IsEmpty() cout 错误!队列为空! endl; exit(-1);else info=datafront;front=(front+1

8、)%MaxSize;void GetHead(T &info) / 取队首元素 if(IsEmpty() cout 错误!队列为空! endl; exit (-1);else info=datafront;void Initqueue(cirularQueue&,int);void display(int,int);void charge(int,int);using namespace std;static int songnum=0; / 定义歌曲的数量并初始化为 0static int m=0,n=0; /男生和女生的人数int main() /主函数 coutmn; display(m

9、,n);int a=0,b=0; / 男生和女生的编号,以判断他们在第几首歌时能在 一起跳舞char quit=y; / 判断是否继续输入 , 如果继续输入,则输入 y ;否 则输入 nwhile(quit!=n) coutab;while(am)|(bn) / 如果输入错误 coutab; charge(a,b); coutquit;return 0;void Initqueue(cirularQueue &Q,int m) /初始化队列 for(int i=1;i=m;i+)(i);void display(int m,int n) cirularQueue man(m+1); cirul

10、arQueue woman(n+1); Initqueue(man,m);Initqueue(woman,n); coutsongnum;cout 每曲的配对情况为 :endl;for(int k=1;k=songnum;k+) int x=0,y=0; / 男生和女生的编号(x); / 男生按顺序出对跳舞(y); / 女生按顺序出对跳舞cout第 k 曲 :tx 号男 生 y 号女 生 endl;/ 他们在一起跳舞(x); / 跳完舞后男生再次进入队列等在下一次跳舞(y); / 跳完舞后男生再次进入队列等在下一次跳舞void charge(int a,int b) int count=0;

11、/ 定义舞曲计数以记录他们能在第几曲时在一起跳舞 cirularQueue man1(m+1);cirularQueue woman1(n+1);Initqueue(man1,m);Initqueue(woman1,n); while(count=songnum) int x, y; count+; (x); (y); (x); (y); if(x=a)&(y=b) cout 第count首曲:ta 号男生 b号女 生 endl;break;/ 如果他们在这个舞会上不能在一起跳舞,则输出 if(count=songnum+1)cout 他们在这个舞会上不可能在一起跳舞 endl;五、测试结果:

12、总结:本设计采用的是循环队列的基本操作顺利的解决学生舞曲搭配问题, 主要利用用循环队 列的环状结构, 循环地执行出列入列操作并在出队列时进行配对并输出配对情况, 而整个过 程不需要不需要移动元素使程序在空间复杂度上降到最小, 采用指针的移动大大加快了程序 的执行效率。并且对输入进行了改进,以防止用户随意输入时出现的各种意想不到的错误。本次程序设计中所用语言为C+,程序开始定义了类 cirular ,其中有头指针,尾指针及数据域等。 随之定义了析构函数,释放对象, 然后进行了队列的基本操作,有队列的申 明,判断队空及队满, 出队,入队,其核心是 display() 函数和 charge() 函数,其中 display() 用于对各位同学编号和每队的输出情况, charge() 用于计算已编号的同学在第几曲中进行配 对。循环队列是一种环状的队列并且对头元素指向队尾元素,学生搭配问题是典型的只有采用循环队列才能解决的问题,实验表明该算法的空间复杂度优于其他算法。通过这次实验, 我发现自己在数据结构这方面真是知之甚少, 以前学习的知识也多有遗 忘。与其说这是一次学习,倒不如说这是一次检测。所以,这次实验让我很好的认清自己对 数据结构

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论