約瑟夫 環 問題 Josephu 單向環形鍊錶

2021-10-22 16:28:51 字數 2031 閱讀 3788

/** * @建立人 wdl

* @建立時間 2021/3/19

* @描述

*/public

class

josepfu

}//建立乙個環形的單向鍊錶

class

circlesinglelinkedlist

boy curboy=null;

//輔助指標,幫助我們構建環形鍊錶

//使用for來建立我們的環形鍊錶

for(

int i =

1; i <=nums; i++

)else}}

//遍歷當前的環形鍊錶

public

void

showboy()

//因為first不能動,因此我們仍然使用乙個輔助指標完成遍歷

boy curboy=first;

while

(true

) curboy=curboy.

getnext()

;}}//根據使用者的輸入,計算出小孩出圈的順序

/** *

* @param startno 表示從第幾個小孩開始數數

* @param countnum 表示數幾下

* @param nums 表示最初有多少個小孩在圈中

*/public

void

countboy

(int startno,

int countnum,

int nums)

//建立乙個輔助指標,幫助完成小孩出圈

boy helper=first;

//需要建立乙個輔助指標(變數)helper,事先應該指向環形鍊錶的最後這個節點

while

(true

) helper=helper.

getnext()

;}//小孩報數前,先讓first和helper移動k-1次

for(

int j =

0; j < startno -

1; j++

)//當小孩報數時,讓first和helper指標同時的移動m-1次,然後出圈

//這裡是乙個迴圈操作,直到圈中只有乙個節點

while

(true

)//讓first和helper指標同時的移動countnum-1次,然後出圈

for(

int j =

0; j < countnum -

1; j++

)//這時first指向的節點,就是要出圈的小孩節點

system.out.

println

("小孩"

+first.

getno()

+"出圈");

//這時將first指向的節點出圈

first=first.

getnext()

; helper.

setnext

(first);}

system.out.

println

("最後留在圈中的小孩編號"

+helper.

getno()

);}}

//建立乙個boy類,表示乙個節點

class

boypublic

intgetno()

public

void

setno

(int no)

public boy getnext()

public

void

setnext

(boy next)

}

Josephu 約瑟夫 約瑟夫環 問題

version 2019年08月08日 public class josepfu 建立乙個環形的單向鍊錶 class circlesinglelinkedlist 輔助指標,幫助構建環形鍊錶 boy curboy null for int i 1 i nums i else 遍歷當前的環形鍊錶 pu...

Josephu問題 單向環形列表

josephu問題 設編號為1,2,n的n個人圍坐一圈,約定編號為k 1 k n 的人從1開始報數,數到m的那個人出列,它的下一位又從1開始報數,數到m的那個人又出列,依次類推,直到所有人出列為止,由此產生乙個出隊編號的序列。根據問題的描述,我們可以使用乙個沒有頭節點的單向環形鍊錶來實現解決這個jo...

環型單向鍊錶 約瑟夫問題

josephu問 題為 設編號為1,2,n的n個人圍坐 圈,約定編號為k 1 k n 的人從1開始報數,數到 m的那個人出列,它的下一位又從1開始報數,數到m的那個人又出列,依次類推,直到所有人出列為止,由此 產生 乙個出隊編號的序列。用乙個不帶頭結點的迴圈鍊錶來處理josephu問題 先構成 乙個...