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

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

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

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

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std; typedef struct lnode
{
int data;
struct lnode *link;
}lnode; /**
* @brief 约瑟夫环问题:
* n 个人,编号为 1,2,...,n
* 从编号K的人开报数(从1开始)
* 喊道 m 的人出列,也就是:从 1 数到 m,
*
* @param total 总人数
* @param start 确定第一个开始报数的人编号
* @param outnum 指定出列者喊到的数
*/
void JOSEPHUS(int total, int start, int outnum)
{
//1. 定义变量
lnode *p;
lnode *r;
lnode *curr; //curr 指向尾, curr->link 指向头 //2. 建立第一个节点
p = (lnode*)malloc(sizeof(lnode));
p->data = ;
p->link = p;
curr = p; //3. 建立循环链表
for (int i=; i<=total; i++)
{
lnode *t = (lnode*)malloc(sizeof(lnode));
t->data = i;
t->link = curr->link;
curr->link = t;
curr = t;
printf("%d\n", i);
} //4. 指针移动到第一个报数的人
while (start--)
{
r = p;
p = p->link;
} //5. 开始遍历删除
while (total--)
{
//定位删除点
for (int s=outnum-; s--; r=p,p=p->link); printf("%d->", p->data); //删除节点
r->link = p->link;
free(p);
p = r->link;
}
printf("\n");
} int main()
{
int total = ; //总人数
int start = ; //确定第一个开始报数的人编号(1,2,...)
int outnum = ; //指定出列者喊到的数 JOSEPHUS(total, start, outnum);
}

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. 10分钟学会使用Markdown绘制UML时序图

    1.1 什么是Markdown? Markdown是一种语法特别少.特别简单的标记语言,用来编写文档.用Markdown编写的文档是纯文本格式,经过编辑器的渲染,就会形成排 版优美的文档,本文就是用M ...

  2. (五)CXF之添加拦截器

    一.需求分析 webService中的拦截器类似于servlet的Filter过滤器.一般用于调用服务前后先调用拦截器的方法. 二.案例 本章案例是基于上一章节的基础上添加拦截器的 2.1 服务端添加 ...

  3. 在Angular中使用$ compile

    转载自:http://odetocode.com/blogs/scott/archive/2014/05/07/using-compile-in-angular.aspx 在AngularJS中创建一 ...

  4. 八、wepy代码规范

    变量与方法尽量使用驼峰式命名,并且注意避免使用$开头. 以$开头的标识符为WePY框架的内建属性和方法,可在JavaScript脚本中以this.的方式直接使用,具体请参考API文档. 小程序入口.页 ...

  5. 客户端相关知识学习(十二)之iOS H5交互Webview实现localStorage数据存储

    前言 最近有一个需求是和在app中前端本地存储相关的,所以恶补了一下相关知识 webView开启支持H5 LocalStorage存储 有些时候我们发现写的本地存储没有起作用,那是因为默认WebVie ...

  6. 基于OPENldap搭建postfix 虚拟用户

    本文首发: https://www.somata.work/2019/DependOPENldapBuildPostfixVirtualMailUser.html postfix + dovecot ...

  7. Java 中的多态,一次讲个够之接口实现关系中的多态

    上文还没有写完,这一篇继续 Java 中的多态,一次讲个够之继承关系中的多态 https://www.cnblogs.com/qianjinyan/p/10824576.html 接口实现关系,和继承 ...

  8. 【Jenkins】忘记admin密码,可以用此方法帮你解决

    突然有一日发现自己忘记了jenkins的管理员密码,因为我一直登录的是另外一个非管理员账户.如果出现必须要使用管理员账户操作的,比如用户管理那里的,必须要管理员账号吧,这就尴尬了. 很方的我打开安装j ...

  9. 2018/7/31--zznu-oj-问题 G: 方差 普拉斯--【两重暴力循环求方差即可!】

    问题 G: 方差 普拉斯 时间限制: 1 Sec  内存限制: 128 MB提交: 94  解决: 17[提交] [状态] [讨论版] [命题人:admin] 题目描述 方差(样本方差)是每个样本值与 ...

  10. 0004SpringBoot整合Redis

    在已经整合了SpringDataJPA和Junit的基础上,整合Redis,只需要一下几步即可: 1.下载64windows版的Redis安装包.解压并启动服务端 2.配置Redis的起步依赖(pom ...