博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
循环链表,约瑟夫环问题
阅读量:6583 次
发布时间:2019-06-24

本文共 1242 字,大约阅读时间需要 4 分钟。

  约瑟夫(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

你可能感兴趣的文章
有一个系统修复处于挂起状态,需要重新启动才能完成该修复
查看>>
Ubuntu上安装bind9
查看>>
访问共享提示“服务器存储空间不足,无法处理此命令。”
查看>>
C#读写XML文件
查看>>
linux
查看>>
今夜杂谈
查看>>
第七章 虚拟化 虚拟机备份 Veeam backup &Replication
查看>>
微软云计算介绍与实践(介绍之五)
查看>>
在linux下搭建HA和LB集群(lvs&heartbeat群集)
查看>>
安装wine
查看>>
阻抗匹配与史密斯(Smith)圆图基本原理
查看>>
路由器与交换机的密码恢复
查看>>
Cisco路由器上的IPSec协议(站点到站点的×××)
查看>>
Java面向对象学习笔记 -- 5(抽象类、接口)
查看>>
关于apache下同IP多域名支持HTTPS和80跳转HTTPS的配置
查看>>
Linux Python详细安装、升级指南
查看>>
软件架构
查看>>
无法修复ie使用代理服务器
查看>>
【Apache Mina2.0开发之二】自定义实现Server/Client端的编解码工厂(自定义编码与×××)!...
查看>>
JS判断终端类型
查看>>