问题:一群人站成一个圆圈,从一个人开始报数,1, 2 ,。。。m,报到m的拉出去砍了,求被砍的顺序和最后一个活下来的。

利用单向循环链表实现

C++代码如下:(参考书籍:数据结构与算法实验指导书)

#include <iostream>
using namespace std;struct NodeType
{int num;char name[20];NodeType* next;
};
class Jose
{
private:NodeType* p_head;
public:Jose(){p_head = new NodeType;  //带空头的链表p_head->next = p_head;  //空的循环链表}~Jose(){}void creat();void print();
};
void Jose::creat()
{int i = 0, n;NodeType *newp, *tempNode;tempNode = p_head;cout << "\n enter total nums of people: ";cin >> n;for(i = 0; i < n; ++i){newp = new NodeType;newp->num = i+1;cout << "\n enter name: ";cin >> newp->name;newp->next = p_head;    //此处p_head为尾部哨兵tempNode->next = newp;   //不断地往尾部(尾部哨兵之前)插入节点tempNode = newp;}tempNode->next = p_head->next;  //断开空头哨兵delete p_head;                  //释放哨兵节点p_head = tempNode->next;        //头结点指向第一个节点
}
void Jose::print()
{int m,i;NodeType *del = p_head, *tempNode;cout << "\n enter value m(m>=2):";cin >> m;cout << "\n start:" << endl;while(del->next != del)         //链表节点个数不为1{for(i = 1; i < m; ++i)        //del往后移动m位{tempNode = del;del = del->next;}cout << del->num << " " << del->name << endl;tempNode->next = del->next;     //断开del节点delete del;                     //释放del节点del = tempNode->next;}cout << del->num << " " << del->name << endl;delete del;             //链表只剩一个节点直接删除
}int main()
{Jose gameList;gameList.creat();gameList.print();cout << "press any key to exit!" ;cin.get();return 0;
}

Valgrind检查结果:

假设有5个人,报数3的出列,手动模拟如下

数据结构--链表--约瑟夫环问题(单向循环链表)相关推荐

  1. python约瑟夫环单向循环链表_约瑟夫环的单向循环链表的实现代码

    /************************************************************************* > File Name: JosephCir ...

  2. 《恋上数据结构第1季》单向循环链表、双向循环链表以及约瑟夫环问题

    循环链表(CircleList) 链表的接口设计 单向循环链表 单向循环链表完整源码 双向循环链表 双向循环链表完整源码 双向循环链表解决约瑟夫环问题 如何发挥循环链表的最大威力? 静态链表 数据结构 ...

  3. python之链表、单链表、双向链表、单向循环链表

    python之链表.单链表.双向链表.单向循环链表 链表 顺序表的构建需要预先知道数据大小来申请连续的存储空间,而在进行扩充时,又需要进行数据的搬迁,所以使用起来并非很灵活 链表结构可以充分利用计算机 ...

  4. 数据结构与算法作业3——约瑟夫环问题(循环链表)

     第二次作业: 习题2 载具杀手与时停高手(约瑟夫环问题) 著名绅士简尚夫有一项特殊的天赋,他可以摧毁任意一辆载具(载具杀手).他的朋友狄傲可以将时间暂停(时停高手).他俩玩一个游戏. 有N辆车,编号 ...

  5. java 单链表约瑟夫环_java循环单链表实现约瑟夫环问题

    package SingleLinkList; //节点类 class Node{ private int data; private Node next; public int getData() ...

  6. 约瑟夫环-(数组、循环链表、数学)

    约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列:他的下一个人又从1开始报数,数到m的那个人又出 ...

  7. 【数据结构与算法】之单向循环链表的创建/遍历/插⼊/查找/删除算法实现

    一.单向循环链表简介 单向循环链表是一个收尾相接的链表,将单链表的最后一个指针域改由NULL改为指向表头结点这就是单链式的循环链表,并称为循环单链表. 带头结点的循环单链表的各种操作的算法实现与带头结 ...

  8. 广义表头尾链表存储结构_单向循环链表的存储结构和操作

    单向循环链表的存储结构 单向循环链表(Circular Linked List)是单向链表的一种扩充,当单向链表带有头结点时,把单向链表中尾结点的指针域由空指针改为头结点的指针(当单向链表不带头结点时 ...

  9. 数据结构-链表带环问题

    目录 一.如何判断一个链表是否有环? 二.如何证明fast和slow不会在回环中错过,永远都遇不上? 三.为什么slow走1步,fast走的是2步?能不能fast一次走3或者n步? (1)fast走3 ...

最新文章

  1. 沙市一中2021年高考成绩查询,2021年荆州高考状元名单公布,荆州文理科状元是谁多少分...
  2. 凭借这份Java面试题集,分布式宝典:限流+缓存+通讯
  3. 1.3 字符编码介绍
  4. python代码变成运行程序_用Python脚本转换成windows的可执行程序
  5. hdu 1800 Flying to the Mars
  6. php json无法解析中文,json 无法解析解决方法
  7. chameleon 算法_为了简单起见,Arquillian Chameleon
  8. 搅局者奇虎360:特供机背后的周式隐忧
  9. 为提升在线语音识别效率,他创造了两种升级版算法模型
  10. Oracle用imp和exp实现数据的导入和导出
  11. 实习商汤,校招华为,我的深度学习之路
  12. 不同方式实现IP访问限制
  13. nm命令和其内容详解
  14. CTFshow 击剑杯 部分WP
  15. 2022.12.14 英语背诵
  16. WorldModel世界模型代码训练实录
  17. unity 烘焙 光照贴图 以及一些灯光的相关问题(一)
  18. DC初级摄友必学摄影技巧
  19. 歌声合成软件UTAU
  20. MVC 自定义 错误页面

热门文章

  1. oracle values函数,Oracle文本函数简介
  2. php 年月日 中文,转换中文日期的PHP程序
  3. 进程中的一个线程死了所引发的后果
  4. [UWP]做个调皮的BusyIndicator
  5. Linux中source是什么指令?
  6. Eclipse 编写代码自动提示设置
  7. 让窗体接受拖放, 并获取拖过来的文件信息 - 回复 海浪问 的问题
  8. 用MS SQL Server事件探查器来跟踪数据库的操作
  9. 标准C语言库 Glibc 2.15
  10. C语言const易错点