约瑟夫(Josephus)环问题:编号为1,2,3,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数的上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一人开始重新从1报数,如此下去,直到所有人全部出列为止。

建立n个人的单循环链表存储结构,运行结束后,输出依次出队的人的序号。

#include <stdio.h>
#include <stdlib.h>
#include "malloc.h"

typedef struct Node{  //节点
    struct Node *next;
    int data;
}Node;

typedef struct List{  //循环链表存储结构
    Node *front;
    Node *rear;
    int length;
}List;

List* Init(){
    List* L = (List*)malloc(sizeof(List));
    L->front = NULL;
    L->rear = NULL;
    L->length = 0;
}

void insert(List *L, Node *e){
    if(L->length == 0){
        L->front = e;
        L->rear = e;
    }else{
        L->rear->next = e;
        L->rear = e;
    }
    L->rear->next = L->front;
    L->length++;
}

void display(List *L){
    Node *p = L->front;
    int i = 1;
    for( ; i <= L->length; i++){
        printf("The out is %d\n", p->data);
        p = p->next;
    }
}

int main()
{
    int N = 30; //人数
    int M = 3; //报数上限

List *L = Init();
    int i = 1;
    for(; i <= N; i++){
        Node *e = (Node*)malloc(sizeof(Node));
        e->data = i;
        insert(L, e);
    }

Node *p = L->rear;
    Node *q = NULL;
    int cnt = 1;
    int REST = L->length;
    while(REST > 0){
        for(cnt = 1; cnt < M; cnt++){
            p = p->next;
        }
        q = p->next;
        printf("The out is %d\n", q->data);
        p->next = p->next->next;
        REST--;
    }
    return 0;
}

转载于:https://www.cnblogs.com/pbnull/p/4565169.html

循环链表,约瑟夫环问题相关推荐

  1. 链表基础操作 / 循环链表约瑟夫环/STL链表基本操作

    链表的基础操作 程序功能 输入几 就把几调到数最前面 程序步骤: 1.插入函数 2.初始化函数 3.删除节点 4.把排列展示出来 程序注意 不同函数的指针 不同 头指针定义为全局变量 代码实现截图 # ...

  2. 循环链表(约瑟夫环)的建立及C语言实现

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

  3. Algorithms_基础数据结构(04)_线性表之链表_单向循环链表约瑟夫环问题

    文章目录 大纲图 链表的经典面试题目 如何设计一个LRU缓存淘汰算法 约瑟夫问题 结构 分析 大纲图 链表的经典面试题目 如何设计一个LRU缓存淘汰算法 tip:单向链表 约瑟夫问题 N个人围成一圈, ...

  4. 循环链表——约瑟夫环问题

    老样子,先创建好结构体 typedef int datatype;typedef struct Node {union{datatype data; //节点数据域int len; //长度};str ...

  5. 约瑟夫环 单向循环链表实现

    约瑟夫环 已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列:他的下一个人又从1开始报数,数到m的那个人又出列:依此规律重复下去,直到圆桌周围 ...

  6. 约瑟夫环之循环链表实现

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

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

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

  8. 循环链表解决约瑟夫环问题

    约瑟夫环问题可以简单的使用数组的方式实现,但是现在我使用循环链表的方法来实现,因为上午看到一道面试题规定使用循环链表解决约瑟夫环问题. 什么是约瑟夫环? "约瑟夫环是一个数学的应用问题:已知 ...

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

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

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

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

最新文章

  1. ​阿里达摩院金榕:从技术到科学,中国 AI 将何去何从?
  2. 关于iOS7里的JavaScriptCore framework
  3. dataframe格式的数据处理
  4. java 小根堆 排序_堆排序(java实现)
  5. Xcode Developer Tools
  6. Fragstats软件使用及其景观生态学意义
  7. python numpy计算任意底数的对数 log
  8. Java中强、软、弱、虚引用
  9. mybatis之choose标签
  10. MySQL中 begin 事务 begin ,第二个begin带自动提交功能???
  11. zoj 1005 Jugs BFS
  12. 统计了300位硬件工程师的工资,我悟了
  13. 牛逼,手机居然可以无线投屏到笔记本电脑!
  14. 全网最火爆,最详细Docker与自动化测试讲解,看完觉得我又行了
  15. 【题目解析】2019年第十六届中国研究生数学建模竞赛B题 --天文导航中的星图识别+
  16. JAVA笔记(6)面向对象(上)
  17. 2018.8.18日,直播笔记
  18. 大蟒蛇python头像_程序员用Python获取了自己以前的QQ历史头像,以前的非主流形象简直不忍直视...
  19. 【Web技术】云开发到底怎么用?看这篇就够了
  20. 机器学习实战笔记 第二章(1)

热门文章

  1. linux进程磁盘io监测,系统性能检测--磁盘io
  2. 苹果开发者账号可以创建多少测试证书_苹果开发者账号相关问题解答—企业开发者账号...
  3. php程序如何保证3秒作出响应,这个留言本的响应时间总是在3秒左右,如何优化?...
  4. web前端移动开发必须知道那些基础
  5. 判断php对象不包含的key,如何判断一个对象是否包含指定Key
  6. java程序员技术_JAVA程序员需要懂得哪些技术
  7. python3实例车代码_Python编程pygame模块实现移动的小车示例代码
  8. 中国计量学院全国计算机二级报名,中国计量大学教务管理系统入口https://jwc.cjlu.edu.cn/...
  9. 20210201:力扣第226周周赛(上)
  10. 流程建设过程中个人和团队可能面临的问题