欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java使用鏈表實(shí)現(xiàn)約瑟夫環(huán)

 更新時(shí)間:2019年05月06日 11:12:23   作者:hairongtian  
這篇文章主要為大家詳細(xì)介紹了java使用鏈表實(shí)現(xiàn)約瑟夫環(huán),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

約瑟夫環(huán)是一個(gè)數(shù)學(xué)的應(yīng)用問題:已知n個(gè)人(以編號(hào)1,2,3...n分別表示)圍坐在一張圓桌周圍。從編號(hào)為k的人開始報(bào)數(shù),數(shù)到m的那個(gè)人出列;他的下一個(gè)人又從1開始報(bào)數(shù),數(shù)到m的那個(gè)人又出列;依此規(guī)律重復(fù)下去,直到圓桌周圍的人全部出列。求出出隊(duì)序列。

采用鏈表實(shí)現(xiàn),結(jié)點(diǎn)數(shù)據(jù)就是編號(hào)。

package com.dm.test;
 
public class Test2
{
 public static void main(String[] args)
 {
 //頭結(jié)點(diǎn)
 Node root = new Node(1);
 int[] order = build(root,9,5);
 for(int i =0;i<order.length;i++)
 {
 System.out.print(order[i]+" ");
 }
 }
 //將約瑟夫環(huán)建成一個(gè)鏈表
 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;
 }
 //出隊(duì)列
 //結(jié)束條件:只有一個(gè)結(jié)點(diǎn)時(shí),這個(gè)結(jié)點(diǎn)的next是它自身
 //將出來的數(shù),放在一個(gè)數(shù)組中,遍歷數(shù)組就是出隊(duì)序列
 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;
 }
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論