1、1 课课 程程 设设 计计 报报 告告 课程设计名称:数据结构课程设计数据结构课程设计 课程设计题目: 约瑟夫环模拟 院(系):计算机学院 专 业:计算机科学与技术 2 目录目录 1 课程设计介绍 1 1.1 课程设计内容 1 1.2 课程设计要求1 2 课程设计原理 2 2.1 课设题目粗略分析 . 2 2.2 原理图介绍 2 2.2.1 功能模块图 2 2.2.2 流程图分析 2 3 数据结构分析 7 3.1 存储结构. 7 3.2 算法描述. 7 4 调试与分析 8 4.1 调试过程. 8 5 运行结果 . 9 参考文献. 9 附 录(程序清单) . 10 课程设计总结14 1 1 1
2、课程设计介绍课程设计介绍 1.1 1.1 课程设计内容课程设计内容 由一个双向循环链表模拟 m 个人站成一个圈,输入一个数 n,n0 正向 前进,ndata=1; / data 记录当前人的位置 person-next=person-prev=person; s=person; for(i=2;idata=i; s-prev=r; /依次将新生成的节点插入循环链表中 r-next-prev=s; s-next=r-next; r-next=s; 2) 删除节点 tmp 的算法,如下所示: tmp-prev-next=tmp-next; /将 tmp 前一个节点的 next 指 /针指向 tmp
3、 的下一个节点 tmp-next-prev=tmp-prev; /将 tmp 下一个节点的 prev指针 /指向 tmp 的上一个节点 课设报告 8 4 4 调试与分析调试与分析 4.4.1 1 调试过程调试过程 在调试程序时主要遇到以下几个问题: 1) 调试时发现在链表上删除节点之后无法继续将下一个节点作为开始来循 环而且当输入的 n的值为 n的整数倍时无法正常输出出圈序列。 问题分析及解决办法:专门创建一个删除函数,负责删除传入的节点并返回删除 节点的下一节点,另外申请一个节点传入链表的表头。 2) 当链表中节点只剩下一个的时候发现无法输出最后节点所在的位置。 问题分析及解决办法:在循环中
4、添加一个判断条件,当链表中只剩唯一一个节点 的时候单独输出节点所在的位置。 3) 调试过程中发现在删除第一个节点之后链表不能继续前进 n 个位置并输 出第 n个位置的序列。 问题分析及解决办法:当第一个节点被删除后,将第一个节点后的节点作为头结 点。 4) 调试过程中发现程序运行时不能按照正常的顺序输出出圈序列, 后经过多 次细心调试及同学帮助才发现是全局变量和局域变量发生冲突而导致。 解决办法:将全局变量和局域变量分别用不同的字母表示加以区分,经过调试后 输出正常。 课设报告 9 5 5 运行结果运行结果 如图: 参考文献参考文献 1 严蔚敏,吴伟民. .数据结构(C 语言版)M.北京:清华
5、大学出版社,2007. 2 吕英国.算法设计与分析M.北京:清华大学出版社,2006. 3 徐宝文 李志. .C 程序设计语言M.北京:机械工业出版社,2004. 4 张长海,陈娟. .C 程序设计M.北京:高等教育出版社,2004. 5 谭浩强. .C 程序设计M.北京:清华大学出版社,2005. 6 张千帆.数据结构与算法(C 语言实现)M.北京:科学出版社,2009 7 徐宝文 李志 . C 程序设计语言M . 北京:机械工业出版社,2004 课设报告 10 附附 录(关键部分程序清单)录(关键部分程序清单) 程序代码程序代码 #include #include #include typ
6、edef struct DulNode int data; struct DulNode*prev; struct DulNode*next; DulNode; DulNode*del_link1(DulNode*person,DulNode*tmp,int m) /* n0 删除第 n 个节点打印本次操作结果 并返回后一个节点信息*/ DulNode*s=tmp; int i=0; DulNode*head; if(tmp!=person) head=person; else head=person-next; tmp-prev-next=tmp-next; tmp-next-prev=tmp-prev; s=s-next; free(tmp); pr