约瑟夫环(Joseph)问题.ppt

约瑟夫环(Joseph)问题.ppt

ID:51342440

大小:277.50 KB

页数:15页

时间:2020-03-22

约瑟夫环(Joseph)问题.ppt_第1页
约瑟夫环(Joseph)问题.ppt_第2页
约瑟夫环(Joseph)问题.ppt_第3页
约瑟夫环(Joseph)问题.ppt_第4页
约瑟夫环(Joseph)问题.ppt_第5页
资源描述:

《约瑟夫环(Joseph)问题.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、约瑟夫环(Joseph)问题姓名:学号:系别:指导老师:目录1.程序设计目标2.问题描述3.概要设计4.详细设计5.测试报告6.总结1.程序设计目标约瑟夫(Joseph)环问题是数据结构中的经典问题,在学习线性表的时候常用到约瑟夫环问题,通过学习约瑟夫环问题能提高对线性表的理解和应用能力。约瑟夫环问题可利用多种方法求解,本设计主要利用单向循环链表存储结构模拟此过程,按照出列的顺序输出各个人的编号。同时,通过查找C语言相关知识,分析约瑟夫环问题与循环链表之间的联系,然后形成算法的思想对约瑟夫环问题用C语言进行编译实现。2.问题描述编号是1,2,……,n的n个人按照顺时针方向围

2、坐一圈,每个人只有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个人开始顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。设计一个程序来求出出列顺序。2.问题描述图1Joseph环示意图3.概要设计本设计实现约瑟夫环问题主要由三个模块构成:主模块、链表的创建、输出序列。图2各模块调用关系3.概要设计单向循环链表:将单链表尾节点的指针端由空指针改为指向头节点,使整个单链表形成一个环。图3所示为带头节点的循环单链表。图3循环单链表4.详细设计链表的创

3、建主要用到CreateLinkList()函数,首先从主函数main()函数中读取个人信息,包括人数、每个人持有的密码以及第一个报数值,然后开始创建循环单链表来存储每个人的密码,创建完成后返回main()函数。4.详细设计图4链表的生成4.详细设计输出出对序列主要用到Joseph()函数,首先从创建好的循环链表中按初始密码依次找出对应出列序列,然后依次输出每个人持有的密码c,当所有密码输出后,删除相应的节点,并释放所占有的存储空间,返回主函数。4.详细设计图5输出序列的实现5.测试报告//尾插入法创建链表voidCreateLinkList(LinkList*&L,intn

4、){LinkList*s,*c;inti;L=(LinkList*)malloc(sizeof(LinkList));//创建头节点c=L;printf("请输入第1个元素的密码:");scanf("%d",&(c->cipher));c->data=1;for(i=2;i<=n;i++){s=(LinkList*)malloc(sizeof(LinkList));printf("请输入第%d个元素的密码:",i);scanf("%d",&(s->cipher));s->data=i;c->next=s;c=s;}c->next=L;}5.测试报告voidJoseph(Li

5、nkList*&L,intm,intn)//出列{LinkList*s,*c;inti=1;c=L;printf("输出出对序列:");while(n){while(i!=m){s=c;c=c->next;i++;}printf("%-3d",c->data);m=c->cipher;s->next=c->next;free(c);c=s->next;i=1;n--;}printf("");}5.测试报告图6Joseph环编译结果6.总结通过本次的课程设计,我了解到约瑟夫环问题是由古罗马著名的史学家Josephus提出的问题基础上演变而来,所以也称为Josephus问题

6、。Joseph问题的解决方案主要采用循环单链表,循环链表的数据结构,是将一个链表的尾元素指针指向队首元素。在完成设计的同时,我将书上线性表章节的内容复习了一遍,从中也体会到学习数据结构的乐趣。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。