解决约瑟夫环问题核心步骤:

1.建立具有n个节点、无头的循环链表

2.确定第一个报数人的位置

3.不断从链表中删除链节点,直到链表为空

  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. using namespace std;
  5.  
  6. typedef struct lnode
  7. {
  8. int data;
  9. struct lnode *link;
  10. }lnode;
  11.  
  12. /**
  13. * @brief 约瑟夫环问题:
  14. * n 个人,编号为 1,2,...,n
  15. * 从编号K的人开报数(从1开始)
  16. * 喊道 m 的人出列,也就是:从 1 数到 m,
  17. *
  18. * @param total 总人数
  19. * @param start 确定第一个开始报数的人编号
  20. * @param outnum 指定出列者喊到的数
  21. */
  22. void JOSEPHUS(int total, int start, int outnum)
  23. {
  24. //1. 定义变量
  25. lnode *p;
  26. lnode *r;
  27. lnode *curr; //curr 指向尾, curr->link 指向头
  28.  
  29. //2. 建立第一个节点
  30. p = (lnode*)malloc(sizeof(lnode));
  31. p->data = ;
  32. p->link = p;
  33. curr = p;
  34.  
  35. //3. 建立循环链表
  36. for (int i=; i<=total; i++)
  37. {
  38. lnode *t = (lnode*)malloc(sizeof(lnode));
  39. t->data = i;
  40. t->link = curr->link;
  41. curr->link = t;
  42. curr = t;
  43. printf("%d\n", i);
  44. }
  45.  
  46. //4. 指针移动到第一个报数的人
  47. while (start--)
  48. {
  49. r = p;
  50. p = p->link;
  51. }
  52.  
  53. //5. 开始遍历删除
  54. while (total--)
  55. {
  56. //定位删除点
  57. for (int s=outnum-; s--; r=p,p=p->link);
  58.  
  59. printf("%d->", p->data);
  60.  
  61. //删除节点
  62. r->link = p->link;
  63. free(p);
  64. p = r->link;
  65. }
  66. printf("\n");
  67. }
  68.  
  69. int main()
  70. {
  71. int total = ; //总人数
  72. int start = ; //确定第一个开始报数的人编号(1,2,...)
  73. int outnum = ; //指定出列者喊到的数
  74.  
  75. JOSEPHUS(total, start, outnum);
  76. }

c实现循环链表的更多相关文章

  1. java程序设计之循环链表

    照例来说点废话,愿自己生一颗温柔细腻的心,这样女朋友也许一个眼神,一个微笑,我就知道如何做,可惜内心与外表一样粗糙,这一生有幸认识她,愿天下有情人终成眷属. 循环链表,顾名思义循环就好了,所以建一个线 ...

  2. 单链表、循环链表的JS实现

    数据结构系列前言: 数据结构作为程序员的基本知识,需要我们每个人牢牢掌握.近期我也展开了对数据结构的二次学习,来弥补当年挖的坑......   当时上课的时候也就是跟着听课,没有亲自实现任何一种数据结 ...

  3. 双向链表、双向循环链表的JS实现

    关于链表简介.单链表.单向循环链表.JS中的使用以及扩充方法:  单链表.循环链表的JS实现 关于四种链表的完整封装: https://github.com/zhuwq585/Data-Structu ...

  4. JAVA 链表操作:循环链表

    主要分析示例: 一.循环链表简述 二.单链表循环链表 三.双链表循环链表 一.循环链表简述 循环链表即链表形成了一个循环的结构,尾节点不再指向NULL,而是指向头节点HEAD,此时判定链表的结束是尾节 ...

  5. Have Fun with Numbers及循环链表(约瑟夫问题)

    1. 循环链表(约瑟夫问题) https://github.com/BodhiXing/Data_Structure 2. Have Fun with Numbers https://pta.pate ...

  6. javascript中使用循环链表实现约瑟夫环问题

    1.问题 传说在公元1 世纪的犹太战争中,犹太历史学家弗拉维奥·约瑟夫斯和他的40 个同胞被罗马士兵包围.犹太士兵决定宁可自杀也不做俘虏,于是商量出了一个自杀方案.他们围成一个圈,从一个人开始,数到第 ...

  7. Linux内核循环链表经典分析和移植

    为什么说这个链表做的经典呢,哥哥我从Linux内核里边儿扣出来的,要么怎么说内核不是一般人能写的,这代码太TM优美了! 这里有一篇参考文章:http://isis.poly.edu/kulesh/st ...

  8. C语言通用双向循环链表操作函数集

    说明 相比Linux内核链表宿主结构可有多个链表结构的优点,本函数集侧重封装性和易用性,而灵活性和效率有所降低.     可基于该函数集方便地构造栈或队列集.     本函数集暂未考虑并发保护. 一  ...

  9. 双向循环链表的Java版本实现

    1.单项循环列表 单向循环链表是单链表的另一种形式,其结构特点是链表中最后一个结点的指针不再是结束标记,而是指向整个链表的第一个结点,从而使单链表形成一个环.和单链表相比,循环单链表的长处是从链尾到链 ...

  10. C++ 模板双向不循环链表!!

    CTDChain<T,sort,equal,pointer> * nodeTemp = NULL; -------------------------------------------- ...

随机推荐

  1. react以组件为中心的代码分割和懒加载

    背景 随着项目越来越复杂,功能够越来越多,JS单个文件就会比较臃肿,js代码拆分显得必不可少. Js文件拆分主要分为按照路由进行js拆分.按照组件进行js拆分. 按照路由拆分:因为本项目请求路径得原因 ...

  2. mysql查看表结构命令,如下:

    desc 表名; show columns from 表名; describe 表名; show create table 表名;

  3. (六)maven之常用插件

    一.maven的插件 maven官方插件:http://maven.apache.org/plugins/index.html 二.常用插件之:javadoc 作用:生成代码文档 2.1 编写代码,并 ...

  4. iis 虚拟目录 文件服务器

    需求 多节点站点部署时,上传文件地址统一 调整步骤如下 建立文件服务器 共享目录 设置账号密码 各服务器建账号 密码 需与文件服务器账号密码一致 调整 web.config 在<system.w ...

  5. VS2017清除工具、用于清除Microsoft Visual Studio最近打开项目

    最近每天在用VS2017,但是每次打开它都会弹出最近项目的记录,很是烦人. 最主要是我不想别人得知我最近的项目和项目进度,每次加密项目会比较麻烦. 所以经过简单的研究,编写了这个小工具,打开直接单击就 ...

  6. Django rest-framework框架-组件之分页

    分页: a. 分页,看第n页, 每页显示n条数据 from rest_framework import serializers from api import models from rest_fra ...

  7. leetcode-62. Unique Paths · DP + vector

    题面 A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). ...

  8. JS 百度地图 地图线路描绘

    JS 百度地图 地图线路描绘 <script type="text/javascript" src="http://api.map.baidu.com/api?v= ...

  9. ASE19团队项目 beta阶段 model组 scrum6 记录

    本次会议于12月9日,19时30分在微软北京西二号楼sky garden召开,持续20分钟. 与会人员:Jiyan He, Lei Chai, Linfeng Qi, Xueqing Wu, Kun ...

  10. [Python][pythonchallenge][TBC]古老的python在线挑战赛,很有意思 (C0-C4)

    预计阅读时间:15分钟 背景:搜索资料时候偶然发现的,很有意思,每一关都覆盖了很多知识点 Python版本:3.0 Talking is cheap,show me the code 主页: http ...