【C++】链表实现约瑟夫环
2017-11-18 23:11
260 查看
约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。通常解决这类问题时我们把编号从0~n-1,最后的结果+1即为原问题的解。
下面用链表的方式解决约瑟夫环:
下面用链表的方式解决约瑟夫环:
#include<iostream> #include<stack> using namespace std; typedef struct Node { Node* _pNext; int _data; }*pNode, pHead; //链表实现约瑟夫环 pNode Back(pNode pHead)//找尾连环 { if (NULL == pHead) return NULL; pNode pCur = pHead; while (pCur = pHead) { pCur = pCur->_pNext; } } //约瑟夫环 pNode Josephercle(pNode& pHead, int M) { Back(pHead)->_pNext = pHead; Node* pCur = pHead; { while (pCur = pCur->_pNext) { //报数 while (--M) { pCur = pCur->_pNext; } //删节点 pNode pDel = pCur->_pNext; pCur->_data = pDel->_data; pCur-> _pNext = pDel->_pNext; delete pDel; } //解环 pCur->_pNext = NULL; pHead = pCur; return pCur; } }以上是用C++链表的方式实现约瑟夫环,部分注释已经在代码中给出。约瑟夫环问题也是经典的面试题,主要的代码已经在上面附上,有不足的地方欢迎大家批评指正!
相关文章推荐
- C++循环链表之约瑟夫环的实现方法
- C++自定义链表实现约瑟夫环
- 约瑟夫环的链表C++实现
- 【c++】约瑟夫环问题的链表实现
- C++实现链表逆序
- c++之链表实现栈
- 数据结构图文解析之:数组、单链表、双链表介绍及C++模板实现
- 约瑟夫环的链表实现-有头节点
- 学生管理系统c++链表实现
- 深入解析C++的循环链表与双向链表设计的API实现
- 链表常用操作的实现-C++模板实现
- 经典算法与数据结构的c++实现——带头结点的单链表
- C++: 实现双向链表(例题讲解)
- 用C++实现单链表
- 单链表的逆置-C++实现
- 构造双向链表根据访问频度动态调整位置_C++实现
- C++实现链表基本操作
- C++实现链表的进本操作及测试用例
- C++模板实现双向循环链表(有带头结点)
- 几种简单的数据结构的C++实现,树,图,链表,环形队列,栈等---环形队列篇