1、 1 课程设计报告课程设计报告 课程名称: 数据结构课程设计报告数据结构课程设计报告 题 目 : 系 名 : 数学系数学系 专 业: 信息与计算科学信息与计算科学 班 级: 姓 名: XXX 学 号: 指导教师: XXX 职 称: 讲师讲师 XX 年 XX 月 XX 日 2 目录目录 1. 问题描述问题描述-3 2. 具体要求具体要求-3 3. 测试数据测试数据-3 4. 算法思想算法思想-3 5. 模块划分模块划分-4 6. 数据结构数据结构-4 7. 源源程序程序-5 8. 测试情况测试情况-15 9. 设计总结设计总结-17 10. 参考文献参考文献-18 3 一、一、 问题描述问题描述
2、 该课程设计要求解决的问题是:设编号为 1,2,n(n0)个人按顺时针方向围坐 一圈,每人持有一个正整数密码。开始时任意给出一个报数上限值 m,从第一个人开始顺时 针方向自 1 起顺序报数,报到 m 时停止报数,报 m 的人出列,将他的密码作为新的 m 值, 从他在顺时针方向上的下一个人起重新自 1 起顺序报数; 如此下去, 直到所有人全部出列为 止。要求设计一个程序模拟此过程,并给出出列人的编号序列。 二、二、具体要求具体要求 编写一个程序来解决上述问题,该程序必须使用单循环链表,因此要用到循 环线性链表数据结构,用一个循环线性链表模拟按顺时针方向围坐一圈的 n 个人。 三、三、测试数据测试
3、数据 设计了一个编号为 1-5 的五个人按顺时针方向围坐一圈,分别给出他们的如下初 始密码 code 和开始报数上限值 m 1、code:1,2,3,4,5 m:2 2、code:2,3,4,2,5 m:3 3、code:4,3,4,7,5 m:3 4、code:5,2,4,6,5 m:4 四四、算法思想算法思想 完成整个程序使用单循环线性链表来实现, 程序要包括 linklist.h 头文件, 以及 linklist.cpp 和 main.cpp 文件。该程序先建立一个单循环线性链表,这个 链表按顺时针方向存储这些人的序号和密码,链表的包括头结点(不存储人的数 据) ,其他结点的数据部分 i
4、d 代表序号,code 代表密码。首先,用头指针根据报 4 数初始上限值从链表第一个结点开始移动指针,移动上限值个位置,把当前指针 指向的结点 id 输出,并取出密码;然后指针指向下一个结点,把上一个结点从 链表中删除,然后根据取出的密码移动指针密码个值(当指针指向头结点时多移 动一个位置) ,把当前指针指向的结点 id 输出,并取出密码。重复上面操作,即 得到 n 个人的出列编号。 五五、模块划分模块划分 函数功能函数功能: 1) void initList(LinkList /初始化循环线性链表 2) void clearList(LinkList /清空循环线性链表 3) bool isEmpty(LinkList L); /判断循环线性链表是否空 4) bool insertElem(LinkList /插入结点 到循环线性链表 5) bool d