数据结构课设学生搭配问题.docx

数据结构 课程设计报告书 班级 学号 专业 姓名 课题描述: 一、 需求分析: 设计内容 一班有 m个女生 , 有 n 个男生 (m 不等于 n), 现要开一个舞会 . 男女生分别编号坐在 舞池的两边的椅子上 . 每曲开始时 , 依次从男生和女生中各出一人配对跳舞 , 本曲 没成功配对者坐着等待下一曲找舞伴 . 请设计一系统模拟动态地显示出上述过程 , 要求如下 : 输出每曲配对情况 计算出任何一个男生 ( 编号为 X) 和任意女生 ( 编号为 Y), 在第 K曲配对跳舞的 情况. 至少求出 K 的两个值 . 尽量设计出多种算法及程序 , 可视情况适当加分 需求 本课题要对数目不等的男生女生跳舞进行搭配,设计需要解决每一首曲子 男生女生的搭配情况,要采用循环队列的模式来解决,男生和女生各在两个循环 的队列中,每首曲子开始,便在两个队首各取一人成功配对跳舞,并进入队尾, 等待下一次配对。 例如:( 3 男 5 女情况) 第一首:男 1 和女 1 第二首:男 2 和女 2 ......... 第四首:男 1 和女 4 二、 总体结构设计: 为实现上述功能和目的, 要用到循环队列的相关知识, 同时, 要定义一定的抽的数据类型,主函数调用各个函数模块 各模块函数介绍: 1)class cirularQueue 作用:定义一个一个循环队列 2)~cirularQueue() 作用:定义析构函数,使对象在撤销时释放 3)bool IsFull() 作用:判断队列是否已满 4) bool IsEmpty() 作用:判断队列是否为空,用于出队列前使用 5) void push(T info) 作用:入队。每对舞伴跳完舞之后,做入队处理,到达队尾,等待下次跳舞。 6) void Pop(T info) 作用:出队。每取曲子响起时男生队列和女生队列作出队处理,两人跳舞。 7) void GetHead(T info) 作用:取队首元素,对出队的男女进行识别。 8) void Initqueue(cirularQueueint,int); 作用:初始化队列 9) void display(int,int); 作用:根据男生和女生的人数和曲目的数目,来判断每曲歌的男女配对情况 10 ) void charge(int,int); 作用:判断指定组合能否配对成功 本程序包含三个模块: 主程序模块: void main() { 初始化; do{ 接受命令; 处理命令; }while( “命令” =”退出”) } 、集合单元模块——实现集合的各个函数模块 、结点结构单元模块——定义集合的结点结构 三、 各子模块设计: 主函数调用关系图 主函数 数据输入 每曲配对 k 曲配对 ~cirularQueue() 编号 class  void  GetHead(T  输出 void Pop(T void push(T IsEmpty() bool IsFull() 图 main() 初始化示意 began 否 iMaxsize Push(i) end 图 void Initqueue(cirularQueueint Q,int m) 3 每曲配对函数调用关系图 void display(int,int) 初始化男女 循环队列 k=songnum 否 (x) (y) 是 输出 k 首男 x 女 y (x) (y) k++ end 图 void display(int,int) 4 第 k 曲配对函数调用图 void charge(int,int) 初始化男女 循环队列 count=songn count+ (x) (y) (x) (y) (x==a) (y==b) 男 a 女 b 第 count 跳 break 图 void charge(int,int) 4 队满判断 bool IsFull() 首尾顺序相邻 队列为满 5 对空判断原则 bool IsEmpty() 首尾指针相等 队列为空  输出他们不会一起跳 end 6 入队流程 void push(T info) 队满 不能入队 队尾进入 尾指针移 7 出队流程 void Pop(T info) 队空 不能出队 队头出列 头指针移 8. 取队首元素代码 void GetHead(T info) 四、  编程实现: #includeiostream template class T class cirularQueue // 定义一个一个循环队列 { private: int MaxSize; int front; // 头指针 int rear; // 尾指针 *data; public: cirularQueue(int MaxLength) { MaxSize=MaxLengt

文档评论(0)

1亿VIP精品文档

相关文档