1、 数数 据据 结结 构构 课课 程程 设设 计计 说说 明明 书书 学生姓名学生姓名: 学学 号:号: 学学 院院: 软件学院软件学院 专专 业业: 软件工程软件工程 题题 目目: 学生搭配问题学生搭配问题 指 导 教指 导 教 师师 2011 年 12 月 20 日 1 1. 设计任务概述设计任务概述 一班有 m个女生,有 n个男生(m 不等于 n),现要开一个舞会. 男女生分别编号坐在舞池的两边的 椅子上.每曲开始时,依次从男生和女生中各出一人配对跳舞,本曲没成功配对者坐着等待下一曲找 舞伴。实现功能: 1)输出每曲配对情况; 2)计算出任何一个男生(编号为X)和任意女生(编号为Y),在第
2、K曲配对跳舞的情况.至少求出K 的两个值。 图图 1.1 系统总体框图系统总体框图 2. 本设计所采用的数据结构本设计所采用的数据结构 采用队列(Queue)这一数据结构,队列是只允许在一端进行插入,而在另一端进行删除的 运算受限的线性表。循环队列是在队列的顺序存储结构中,除了用一组地址连续的存储单元依次 存放从队列头到队列尾的元素外,尚需附设两个指针 front 和 rear 分别指示队列头元素和队 列尾元素的位置。 3. 功能模块详细设计功能模块详细设计 用循环队列(两个) ,将男生、女生两组人分别存放,以实现循环配对输出。循环队列的入 队,出队,判队满,判队空。运用循环队列的基本操作顺利
3、的解决学生舞曲搭配问题,主要利用 用循环队列的环状结构,循环地执行出列入列操作并在出队列时进行配对并输出配对情况,而整 个过程不需要移动元素使程序在空间复杂度上降到最小,采用指针的移动大大加快了程序的执行 效率。并且对输入进行了改进,以防止用户随意输入时出现的各种意想不到的错误。 主函数 第 K 曲配对 每曲配对 数据输入 输出 编号 2 3.1 3.1 详细设计思想详细设计思想 (1)要模拟动态地显示出现题目中所要求的循环,我们要先建立两个循环 队列 SqQueue1 和 SqQueue2。 (2)将男生、女生两组人分别存入这两个队列。以实现他们的循环配对输出,这是循环队列 固有的特性。 (
4、3)利用循环队列的特性,将男女生分别进行入队列和出队列操作,且实现搭配输出。 (4)循环队列的长度分别设为男女生的个数即可。 (5)存储结构: 循环链表; 核心算法: 循环队列的入队,出队,判队满,判队空。 输入数 据: 男生人数、女生人数,歌曲数量 输出数据: 每一首歌曲播放时,男生和女生搭配情况(只 输出编号 即可) 当要查找的男女搭配时输出歌曲编号, 和他们搭配的总次数。 3.2 3.2 核心代码核心代码 Status EnQueue (SqQueue *Q,QElemType e,int num) /* 入队列,插入元素 e 为 Q 的新的队尾元素 */ if(Q-rear+1)%(num+1) = Q-front) return ERROR; /* 队列满 */ Q-dataQ-rear = e; Q-rear = (Q-rear+1)%(num+1); return OK; /* EnQueue */ Status DeQueue(SqQueue *Q,QElemType *e,int num) /* 若队列不空,则删除 Q 的对头元素,