约瑟夫环的实现.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
约瑟夫环的实现

实验一:约瑟夫环问题 题目:编制一个求解约瑟夫环的程序 班级: 姓名: 学号: 完成日期: 一.需求分析 1.约瑟夫环(Joseph)问题的一种描述是:编号为1,2……,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。 2.程序的演示,即在计算机终端上显示“提示信息”之后,由用户在键盘上输入数据,相应的输入数据和运算结果显示在其后。 3.程序执行的命令包括: 1)输入初始密码和总人数 2)依次输入所有人的密码 3)显示输入的所有人的编号及相应的密码 4)输出出列人的密码及编号 5)程序结束 4.测试数据 (1)m=6, n=7, 7个人的密码依次为3,1,7,2,4,8,4 (2)m=20,n=1,此人的密码是20 (3)m=20,n=0 前面一组为常规数据,后面两组为边缘数据 二.概要设计 1.为实现上述功能,应以有序单向循环链表表示约瑟夫环。为此,需要有一个抽象数据类型。该抽象数据类型的定义为: ADT LinkList { 数据对象:D={ ai | ai ∈termset,i=1,2,……n,n=0}, termset中每个元素包含编号,密码,和一个指向下一节点的指针 数据关系:R1={ai-1,ai | ai-1, ai ∈D , i=2,……n} 基本操作: LinkList AddList(int n);//对单向循环链表进行尾插入赋值 初始条件:存在一个空链表,并以此向其中插入元素 操作结果:向单循环链表中进行尾插入赋值 int ListLength(LinkList L);//求链表的节点个数 初始条件:链表L已存在 操作结果:返回链表L的长度 Status yuesefu(LinkList L,int m);//约瑟夫环的实现 初始条件:实现约瑟夫环的链表L已存在 操作结果:依次输出出列人的密码和出列顺序 } 2.此抽象数据类型中的一些常量如下: #define MAXSIZE 100 #define TRUE 1 #define FALSE 0 typedef int Status; typedef double ElemType; 3.单向循环链表中节点的定义如下所示: typedef struct LNode { int number; ElemType data; struct LNode *next; }LNode,*LinkList; 4.本程序包含三个模块 1).主程序模块 void main( ) { 初始化; 接受命令; 函数实现; } 2).链表模块——实现链表的抽象数据类型 3).约瑟夫环模块——实现约瑟环 各模块之间的调用关系如下: 主程序模块 链表模块 约瑟夫环的实现 5.约瑟夫环中出列一个人的伪码算法: 约瑟夫环的实现(开始) { 判断链表中的数据元素是否为空; 利用P指针依次沿链表中的元素向后跳跃; 循环 {利用P指针依次沿链表移动,共移动(密码-1)次; 直到指向满足上一密码的人的结点; 依次输出出列人的密码和编号; 再把该出列结点的下一结点的编号赋给一个新的变量; 删除该结点,链表长度减一; 依次循环,直到所有人出列为止;} }//结束 三.详细设计 #include stdafx.h #includeiostream using namespace std; #define MAXSIZE 100 //链表的最大长度 #define TRUE 1 #define FALSE 0 typedef int Status; typedef double ElemType; //函数定义 LinkList AddList(int n); int ListLength(LinkList L); Status yuesefu(LinkList L,int m); /********************************************************** 先创建一个单向循环链表; ***********************************************************/ typedef struct LNode { int number; ElemType data; struct LNode *next; }LNode,*LinkList; /****

文档评论(0)

haihang2017 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档