约瑟夫生者死者游戏_第1页
约瑟夫生者死者游戏_第2页
约瑟夫生者死者游戏_第3页
约瑟夫生者死者游戏_第4页
约瑟夫生者死者游戏_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

1、课程设计报告约瑟夫生者死者游戏学生姓名: 专 业: 班 级: 学 号: 指导教师: 2017年 3月29日目录一、实验题目2二、实验目的2三、实验要求2四、实现过程31、总体设计:32、详细设计:33、调试分析:34、运行结果:35、实验总结:6五、参考文献6一、实验题目约瑟夫生者死者游戏二、实验目的本次课程设计的主要目的是综合运用所学的数据结构知识解决Jonsepu环问题,侧重对循环链表等相关内容的综合应用,使自己能进一步熟悉掌握数据结构的基础知识,进一步提升自己的解决问题和编程调试能力,为后续专业课程的学习打下良好的基础。三、实验要求设计要求本游戏的数学建模如下:假设n个旅客排成一个环形,

2、依次顺序编号1,2,n。从某个指定的第1号开始,沿环计数,每数到第m个人就让其出列,且从下一个人开始重新计数,继续进行下去。这个过程一直进行到剩下k个旅客为止。本游戏的要求用户输入的内容包括: 1. 旅客的个数,也就是n的值; 2. 离开旅客的间隔数,也就是m的值;3. 所有旅客的序号作为一组数据要求存放在某种数据结构中。本游戏要求输出的内容是包括1. 离开旅客的序号; 2. 剩余旅客的序号; 四、实现过程1、总体设计:1. 主流程图:开始输入总人数创建链表打印链表输入报数人的位置输入报的数字调用踢出人的模块Out(head,beg,val,huo)结束2. Out函数流程图 开始将p指针指向

3、起始报数的位置剩下的人数大于输入留下的人数否是P指针移动n-3个位置 q指针指向p的下一个结点删除q指针所指的结点p指针指向q的下一个结点释放q指针所指向结点的空间Flag+结束2、详细设计:1.结构体typedef struct Jonse/*定义结构体*/int code;/*编号(分配位置)*/struct Jonse *next;jonse;2.链表的构造函数jonse * Create(int n)/*建立n个节点的单向循环链表函数*/Jonse *h,*p;int i;h=(Jonse *)malloc(sizeof(Jonse);/*为头结点分配空间*/p=h;for(i=1;i

4、<=n;i+)/*建立n个节点的单向链表*/p->code=i;if(i<n)p->next=(Jonse *)malloc(sizeof(Jonse);/*创建新节点*/p=p->next;p->next=h;/*返回头结点,完成单向循环链表的建立*/return h;3.输出链表的函数void ShowList(Jonse *h)/*打印链表函数*/Jonse *p;p=h;doprintf("%dt",p->code);p=p->next;while(p!=h);4.实现将人剔除的函数void Out(Jonse *h,

5、int i,int d,int s)/*出队函数*/int c;c=s;Jonse *p,*q;int k;p=h;for(q=h;q->next!=h;q=q->next);/*初始化链表*/for(k=1;k<i;k+)/*次循环功能:设置好开始报数的人所在位置*/q=p;p=p->next;while(p!=p->next)/*循环删除队列结点*/for(k=1;k<d;k+)/*数数*/q=p;p=p->next;printf("%d ",p->code);/*输出被踢节点的位置*/q->next=p->n

6、ext;free(p);/*释放被踢出的结点*/p=NULL;/*让p指针赋值为空指针*/p=q->next;flag+;if(num-flag=c)break;printf("n剩余游客的编号:n");/free(p);/*释放被踢出的结点*/p=NULL;/*让p指针赋值为空指针*/p = h;doprintf("%d ",p->code);p=p->next;while(p!=h);printf("n");3、调试分析:程序的编写和调试基本正常。遇到的问题主要是:链表的指向的边界问题。本实验采用数据抽象与模块化

7、程序设计方法,思路清晰,实验时调试顺利,各模块具有很好的可重用性,得到了一次良好的程序设计训练。本实验算法是使用循环链表的方法,由于这种方法在删除一个节点后对其他节点的位置改动放不大,所以很浪费时间,每次都删除第m个数字,都要用O(m)的时间,一共有n个数字,想要剩下一个,其余都要删除,那么就要用(n-1)*O(m)的时间,所以算法的时间复杂度为O(mn)。还可以用数组来实现本实验,减少时间的浪费。4、运行结果:1. 要求输入参与者的总人数:2. 打印出创建好的链表,并提示输入开始报数的位置:3. 输入报数人所在的位置,并提示输入报数的最大值:4. 输入报数的最大值,并提示输入留下的人数: 5

8、. 输入留下人数,计算显示结果:结果为删除的人所在的位置和留下的人数:5、实验总结: 通过本次课程设计的锻炼,使我对数据结构又有了许多新的深刻认识,更深的理解了数据结构的难点,并且通过这次课程设计,我把以前认为没有实际用途的知识转化为了实际问题来解决,非常有意思,同时也觉得这种学习方法,更好的提高学习的效率,以下就是我做这次课程设计的主要体会: 一方面,在程序设计语言中,每一个数据都属于某种数据类型。类型明显或隐含地规定了数据的取值范围、存储方式以及允许进行的运算。另一方面,在程序设计过程中,当需要引入某种新的数据结构时,总是借助编程语言所提供的数据类型来描述数据的存储结构。同时,做好课程设计

9、更能体现出同学的学习态度,对于新知识的渴望与追求,能够反映出同学对自己负责任的态度。五、参考文献1 严蔚敏,吴伟民,数据结构,北京:清华大学出版社,2006年2苏小红,C语言程序设计(第3版)2015年六、附录#include<stdio.h>#include<stdlib.h>typedef struct Jonse/*定义结构体*/int code;/*编号(分配位置)*/struct Jonse *next;jonse;jonse * Create(int n);void ShowList(Jonse *);void Out(Jonse *,int,int,int

10、);int flag,num;/*主函数*/main()Jonse *head;int val,beg,huo;flag=0;printf("n请输入游客总人数:");scanf("%d",&num);head=Create(num);ShowList(head);printf("n请输入报数的人所在位置:");scanf("%d",&beg);printf("n请输入报数最大值:");scanf("%d",&val);printf("n请输

11、入留下的人数:");scanf("%d",&huo);printf("n将被扔下大海的游客的编号:n");Out(head,beg,val,huo);return 0;jonse * Create(int n)/*建立n个节点的单向循环链表函数*/Jonse *h,*p;int i;h=(Jonse *)malloc(sizeof(Jonse);/*为头结点分配空间*/p=h;for(i=1;i<=n;i+)/*建立n个节点的单向链表*/p->code=i;if(i<n)p->next=(Jonse *)mall

12、oc(sizeof(Jonse);/*创建新节点*/p=p->next;p->next=h;/*返回头结点,完成单向循环链表的建立*/return h;void ShowList(Jonse *h)/*打印链表函数*/Jonse *p;p=h;doprintf("%dt",p->code);p=p->next;while(p!=h);void Out(Jonse *h,int i,int d,int s)/*出队函数*/int c;c=s;Jonse *p,*q;int k;p=h;for(q=h;q->next!=h;q=q->next);/*初始化链表*/for(k=1;k<i;k+)/*次循环功能:设置好开始报数的人所在位置*/q=p;p=p->next;while(p!=p->next)/*循环删除队列结点*/for(k=1;k<d;k+)/*数数*/q=p;p=p->next;printf("%d ",p->code);/*输出被踢节点的位置*/q->next=p->next;free(p);/*释放被踢出的结点*/p=NULL;/*让p指针赋值为空指针*/p=q

温馨提示

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

最新文档

评论

0/150

提交评论