C语言约瑟夫环的实现

 更新时间:2017年08月11日 14:51:31   作者:XHfight  
这篇文章主要介绍了C语言约瑟夫环的实现的相关资料,这里主要是利用数据数据结果中循环链表来实现,需要的朋友可以参考下

C语言约瑟夫环的实现

一、典故:

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

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

二、用循环链表实现

1.约瑟夫环实现

sListNode* JosephCycle(sListNode* pHead, DataType x) 
{ 
 if(pHead == NULL) 
 return NULL; 
 sListNode* cur = pHead; 
 while(1) 
 { 
 DataType m = x; 
 if(cur->next == cur) 
 { 
 return cur; 
 } 
 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.测试

void TestJosephCycle() 
{ 
 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++中对象与类的详解及其作用介绍

    C++中对象与类的详解及其作用介绍

    这篇文章主要介绍了C++中对象与类的详解及其作用介绍,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • C/C++编写推箱子小游戏

    C/C++编写推箱子小游戏

    这篇文章主要为大家详细介绍了C/C++编写推箱子小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • C语言实现通讯录

    C语言实现通讯录

    这篇文章主要为大家详细介绍了C语言实现通讯录,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • C语言结构体数组同时赋值的另类用法

    C语言结构体数组同时赋值的另类用法

    今天小编就为大家分享一篇关于C语言结构体数组同时赋值的另类用法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • QT应用程序cout输出中文乱码解决方法

    QT应用程序cout输出中文乱码解决方法

    本文主要介绍了QT应用程序cout输出中文乱码解决方法,文中通过图文的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-01-01
  • c++ 基于opencv 识别、定位二维码

    c++ 基于opencv 识别、定位二维码

    这篇文章主要介绍了c++ 基于opencv 识别、定位二维码,帮助大家更好的理解和学习使用c++,感兴趣的朋友可以了解下
    2021-03-03
  • C语言 指针数组详解及示例代码

    C语言 指针数组详解及示例代码

    本文主要介绍C语言 指针数组,这里提供详细的资料和简单示例代码以便大家学习参考,有需要学习的小伙伴可以参考下
    2016-08-08
  • C++中md5 算法实现代码

    C++中md5 算法实现代码

    在网上找了份c++ MD5的代码,就简单保存一下,需要的朋友可以参考下
    2017-07-07
  • C语言中的奇技淫巧

    C语言中的奇技淫巧

    学习C语言的过程中,总会遇到很多令人眼前一亮的代码,尤其是你写了几十行的代码,别人只用了简单几行的递归就实现的功能。下面我就总结几个C语言中 比较新手向的代码。让你有一种woc!还能这么写的想法
    2018-08-08
  • C++中的类模板详解及示例

    C++中的类模板详解及示例

    我们在定义函数时,可以通过定义函数模板,来简化一些功能相同而数据类型不同的函数的定义和调用过程
    2013-10-10

最新评论