当前位置: 首页 > 编程笔记 >

java使用链表实现约瑟夫环

周浩淼
2023-03-14
本文向大家介绍java使用链表实现约瑟夫环,包括了java使用链表实现约瑟夫环的使用技巧和注意事项,需要的朋友参考一下

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

采用链表实现,结点数据就是编号。

package com.dm.test;
 
public class Test2
{
 public static void main(String[] args)
 {
 //头结点
 Node root = new Node(1);
 int[] order = build(root,9,5);
 for(int i =0;i<order.length;i++)
 {
 System.out.print(order[i]+" ");
 }
 }
 //将约瑟夫环建成一个链表
 public static int[] build(Node root,int n, int m)
 {
 Node current = root;
 for(int i = 2; i<=n; i++)
 {
 Node node = new Node(i);
 current.next = node;
 current = node;
 }
 current.next = root;
 int[] order = come(root,n,m);
 return order;
 }
 //出队列
 //结束条件:只有一个结点时,这个结点的next是它自身
 //将出来的数,放在一个数组中,遍历数组就是出队序列
 public static int[] come(Node root,int n, int m)
 {
 int[] order = new int[n];
 int j = 0;
 Node p = root;
 while(p.next!=p)
 {
 int i = 1;
 while(i<m-1)
 {
 p=p.next;
 i++;
 }
 if(i==m-1)
 {
 order[j]=p.next.data;
 j++;
 p.next = p.next.next;
 p=p.next;
 }
 }
 order[j]=p.data;
 return order;
 }
}
class Node
{
 int data;
 Node next;
 public Node(int data)
 {
 this.data = data;
 next= null;
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 主要内容:循环链表实现约瑟夫环,总结无论是 静态链表还是动态 链表,有时在解决具体问题时,需要我们对其结构进行稍微地调整。比如,可以把链表的两头连接,使其成为了一个环状链表,通常称为 循环链表 。 和它名字的表意一样,只需要将表中最后一个结点的指针指向头结点,链表就能成环儿,如图 1 所示。 图1 循环链表   需要注意的是,虽然循环链表成环状,但本质上还是链表,因此在循环链表中,依然能够找到头指针和首元节点等。循环链表和普通链表相

  • 本文向大家介绍C数据结构循环链表实现约瑟夫环,包括了C数据结构循环链表实现约瑟夫环的使用技巧和注意事项,需要的朋友参考一下 C数据结构循环链表实现约瑟夫环 本文代码均在turbo C 2.0 的环境下运行通过,并得到正确结果,本程序为用循环链表实现约瑟夫环,即有m个人站成一个圆环,从某人(队列第一个)开始报数,约定从某数开始的第n个人出列,他的下一个再从一开始报,然再一个报道n的人出列,本程序结果

  • 本文向大家介绍javascript循环链表之约瑟夫环的实现方法,包括了javascript循环链表之约瑟夫环的实现方法的使用技巧和注意事项,需要的朋友参考一下 前言 传说在公元1 世纪的犹太战争中,犹太历史学家弗拉维奥·约瑟夫斯和他的40 个同胞被罗马士兵包围。犹太士兵决定宁可自杀也不做俘虏,于是商量出了一个自杀方案。他们围成一个圈,从一个人开始,数到第三个人时将第三个人杀死,然后再数,直到杀光所

  • 习题2-8 约瑟夫环 约瑟夫(Joseph)问题的一种描述是:编号为1,2,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始以6作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,再从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。请编程输出出列顺序。 输入格式: 首先输入一个整数

  • 本文向大家介绍C语言约瑟夫环的实现,包括了C语言约瑟夫环的实现的使用技巧和注意事项,需要的朋友参考一下 C语言约瑟夫环的实现 一、典故:       据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是商量了一个自杀方式:       41个人排成一个圆圈,由第1个人 开始

  • 本文向大家介绍Python实现约瑟夫环问题的方法,包括了Python实现约瑟夫环问题的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python实现约瑟夫环问题的方法。分享给大家供大家参考,具体如下: 题目:0,1,...,n-1这n个数字排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。 定义函数f(n,m),表示每次在n个数字(0,1,.