本篇文章给大家分享的是有关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:"<data< 以上就是C语言中怎么实现一个约瑟夫环,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注创新互联网站建设公司行业资讯频道。
另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
文章名称:C语言中怎么实现一个约瑟夫环-创新互联
转载来源:http://bjjierui.cn/article/csippe.html