约瑟夫环问及注.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,2,……n的n个人按照顺时针方向围坐一圈。现在从第s个人开始顺序报数,数到第m的人出列,然后从出列的下一个人重新开始报数,数到第m的人又出列,……如此反复,直到所有的人都出列为止。 解决思路: 首先利用线性表的一些运算如创建空线性表、插入元素等构造Josephus表。 从Josephus表中的第s个结点开始寻找、输出和删除表中的第m个结点,然后再从该结点的下一个结点开始寻找、输出和删除表中的第m个结点,重复此过程,直到表中的所有元素都删除。 算法基本思想: 用整数i来代替ni,将初始序列改写成一个整数的序列:1,2,3,……,n,并把它们存储在一个palist所指向的顺序表中,当s=n时,第s个人放在palist-elem[s-1]之中,因此第一个报数出列的应该是下标为s-1+m-1对n取模后的元素,如果这个下标为i,出列工作只要将palist-elem[i]从顺序表中删除,然后对palist-elem[0],palist-elem[1],……,palist-elem[n-2]从下标i开始重复上述过程。 程序清单: #includestdio.h #includestdlib.h #define FALSE 0 #define TRUE 1 typedef int DataType; struct SeqList { int MAXNUM; int n; DataType *elem; }; typedef struct SeqList *PSeqList; PSeqList createNullList_seq(int m) { PSeqList palist=(PSeqList)malloc(sizeof(struct SeqList)); if(palist!=NULL) { palist-elem=(DataType *)malloc(sizeof(DataType)*m); if(palist-elem) { palist-MAXNUM=m; palist-n=0; return palist; } else free(palist); } printf(Out of space!!\n); return NULL; } int isNullList_seq(PSeqList palist) { return(palist-n==0); } int locate_seq(PSeqList palist,DataType x) { int q; for(q=0;qpalist-n;q++) if(palist-elem[q]==x) return(q); return -1; } int insertPre_seq(PSeqList palist,int p,DataType x) { int q; if(palist-n=palist-MAXNUM) { printf(Overflow!\n); return 0; } if(isNullList_seq(palist)) { palist-elem[0]=x; palist-n=1; return 1; } if(p0||ppalist-n) { printf(Not exist!\n); return 0; } for(q=palist-n-1;q=p;q--) palist-elem[q+1]=palist-elem[q]; palist-elem[p]=x; palist-n=palist-n+1; return 1; } int deleteP_seq(PSeqList palist,int p) { int q; if(p0||ppalist-n-1) { printf(Not exist!\n); return 0; } for(q=p;qpalist-n-1;q++) palist-elem[q]=palist-elem[q+1]; palist-n=palist-n-1; return 1; } void josephus_seq(PSeqList palist,int s,int m) { int s1,i,w; s1=s-1; for(i=palist-n;i0;i--) { s1=(s1+m-1)%i; w=palist-elem[s1]; printf(Out element %d\n,w); deleteP_seq(palist,s1); } } main() { PSeqList jos_al

文档评论(0)

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

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

1亿VIP精品文档

相关文档