C语言如何实现一个约瑟夫环

C语言如何实现一个约瑟夫环

本篇内容主要讲解“C语言如何实现一个约瑟夫环”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言如何实现一个约瑟夫环”吧!

C语言约瑟夫环的实现

C语言如何实现一个约瑟夫环

一、典故:

据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是商量了一个自杀方式:

41个人排成一个圆圈,由第1个人 开始报数,每数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从,Josephus要 他的朋友先假装遵从,他将朋友与自己安排在第16个与第31个位置,于是逃过了这场死亡游戏。

二、用循环链表实现

1.约瑟夫环实现

sListNode*JosephCycle(sListNode*pHead,DataTypex){if(pHead==NULL)returnNULL;sListNode*cur=pHead;while(1){DataTypem=x;if(cur->next==cur){returncur;}while(--m){cur=cur->next;}//delete替换法cur->data=cur->next->data;sListNode*del=cur->next;cur->next=cur->next->next;free(del);del=NULL;}

2.测试

voidTestJosephCycle(){sListNode*list=NULL;Push_Back(list,1);Push_Back(list,2);Push_Back(list,3);Push_Back(list,4);Push_Back(list,5);Push_Back(list,6);Push_Back(list,7);Push_Back(list,8);Push_Back(list,9);PrintList(list);//建环sListNode*cur=list;while(cur->next!=NULL){cur=cur->next;}cur->next=list;sListNode*ret=JosephCycle(list,3);cout<<"Joseph:"<<ret->data<<endl;//解环free(ret);//明确知道只有一个节点,直接释放ret=NULL;}

到此,相信大家对“C语言如何实现一个约瑟夫环”有了更深的了解,不妨来实际操作一番吧!这里是恰卡编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

发布于 2022-04-03 22:40:49
收藏
分享
海报
0 条评论
29
上一篇:C语言如何实现多项式相加 下一篇:C语言中如何利用递归实现线索二叉树
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码