C语言单向循环链表实现实现约瑟夫环.docx

C语言单向循环链表实现实现约瑟夫环.docx

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PAGE PAGE # / 4 C语言实现 约瑟夫环问题 ——单向循环链表实现 问题描述: 有n个人围成一圈进行报数游戏,从第一个人开始报到 m的人出圈,接下 来有从下一个人开始,。。。。。。。一次这样往复,直到最后一个人也出圈, 求他们的出圈顺序?(例如8个人,凡报3的人出圈,则他们出圈顺序是 3, 6, 1, ,5, 2, 8, 4,7) #i ncludestdio.h #in cludestdlib.h typedef struct node{ int value; struct node *n ext; }NODE; //********************* 建立循环链表(尾插法建立)***********// NODE *createli nk(i nt number) { NODE *head二NULL,*p二NULL,*q二NULL; int i=1; head=(struct node*)malloc(sizeof(struct node)); //*** 建立第一个节点 ***// head-value=i; p=head; for(i=2;i=number;i++) //*** 建立剩下的 number-1 节点 ****// { q=(struct no de*)malloc(sizeof(struct no de)); if(q==O) retur n 0; p-n ext=q; p=q; p-value=i; } p-n ext二head; retur n head; } //***************** ^建立约瑟夫^环 ********************〃 void jose(NODE *p,i nt nu mber,i nt n) { int i,j,g=0; NODE *q=NULL; for(i=1;i 二nu mber;i++) { for(j=1;j n-1;j++) { p=p-n ext; } q=p-next; 〃***q 用来记录要删除的节点*****〃 p-next二q-next; //**** 删去 q 节点 ******// p=p-n ext; printf(第 %3d 个出圈号是:%3d\n,i,q-value); free(q); } prin tf(\n); // p- next二NULL; 此表达式不能出现在此处,最后一个节点删除后就不存 在了 -主函^数 *************************〃 int main() int nu mber=O; int n=0; printf(请输入总人数number和出拳编号n:\n); sea nf(%d,n umber); sea nf(%d,n); NODE *head=NULL; head二createli nk( nu mber); jose(head ,nu mber, n); system(PAUSE); return 1;

文档评论(0)

wq1987 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档