約瑟夫环实验报告.docxVIP

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

课内实验报告 题目:约瑟夫环(Josephus)问题班级:自动化05 姓名:刘丽丽 学号 完成日期:2011.12.20需求分析1、问题描述: 设有n个人围坐在一个圆桌周围,现从第s个人开始报数,数到第m的人出列,然后从出列的下一个人重新开始报数,数到第m的人又出列,…,如此反复直到所有的人全部出列为止。2、本演示程序中,利用单向循环链表存储结构存储约瑟夫环数据(即n个人的编号,从第s个人开始的标号s以及一个使游戏循环至结束的密码m),模拟约瑟夫环的显示过程,按照出列的顺序印出各人的编号。3、演示程序以用户和计算机的对话方式执行,即在计算机终端上显示提示信息之后,由用户在键盘上输入演示程序中需要输入的数据,以“回车符”为结束标志。相应的输入数据和运算结果显示在其后。 4、程序执行的命令包括: 1)建立长度为n的链表; 2)将开始报数的人的序列号置为1,并从1开始数到m; 2)连续删除第m个元素,同时打印m并重新计数直至结束; 5、测试数据假设总人数n=8,从第s=1个人开始,m 的初值为4;则正确的输出顺序为:4 8 5 2 1 3 7 6。概要设计线性表的抽象数据类型的定义:ADT List { 数据对象:D={ ai | ai ∈ElemSet, i=1,2,...,n, n≥0 } 数据关系:R1={ ai-1 ,ai | ai-1, ai ∈D, i=2,...,n } 基本操作: InitList( L ) 操作结果:构造一个空的线性表L。  DestroyList( L ) 初始条件:线性表L已存在。 操作结果:销毁线性表L。ListEmpty( L )初始条件:线性表L已存在。操作结果:若L为空表,则返回TRUE,否则FALSE。ListLength( L )初始条件:线性表L已存在。操作结果:返回L中元素个数。GetElem( L, i, e )初始条件:线性表L已存在, 1≤i≤LengthList(L)操作结果:用e返回L中第i个元素的值。LocateElem( L, e, compare( ) )初始条件:线性表L已存在,compare( )是元素判定函数。操作结果:返回L中第1个与e满足关系compare( )的元素的位序。若这样的元素不存在,则返回值为0。ListTraverse(L,visit( )) 线性表遍历初始条件:线性表L已存在。操作结果:依次对L的每个元素调用函数visit( )。一旦visit( )失败,则操作失败。 ClearList( L )初始条件:线性表L已存在。操作结果:将L重置为空表。PutElem( &L, i, e )初始条件:线性表L已存在,1≤i≤LengthList(L)操作结果:将e的值赋值给L中第i个元素。ListInsert( L, i, e )初始条件:L已存在,1≤i≤LengthList(L)+1操作结果:在L的第i个元素之前插入新的元素e,L的长度增1。ListDelete(L, i, e)初始条件:L已存在,1≤i≤LengthList(L)操作结果:删除L的第i个元素,并用e返回其值,L的长 度减1。} ADT List 2、 程序包含两个模块: 1)主程序模块:void main(){初始化;do { 接受命令; 处理命令; }while(命令!=“退出“);}2)循环链表单元模块——实现循环链表的抽象数据类型。各模块之间的调用关系如下: 主程序模块 循环链表单元模块三、详细设计:1、元素类型,结点类型和指针类型。typedef struct _Node {int info;struct _Node* next;} Node; //结构体info为节点编号,next 为指向下一个节点的指针2 //删除node之后的第一个节点Node* delNode(Node* node) {Node* temp = NULL;if(node != NULL node-next != node) {temp = node-next;node-next = node-next-next;}return temp;}//在node之后添加一个节点int addNode(Node* node, int info) {Node* temp;if(node != NULL) {temp = (Node*)malloc(sizeof(Node));temp-info = info;temp-next = node-next;node-next = temp;return 1;}return 0;}//构建一个长度为n的约瑟夫环Node* buildLink(int n) {Node* head = (No

文档评论(0)

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

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

1亿VIP精品文档

相关文档