資料結構學習(四) 約瑟夫環

2021-10-04 09:22:19 字數 1848 閱讀 2987

class

boypublic

intgetno()

public

void

setno

(int no)

public boy getnext()

public

void

setnext

(boy next)

@override

public string tostring()

';}}

private  boy first =

newboy(-

1);

public

void

addboy

(int nums)

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

boy curboy = null;

//使用for構建環形鍊錶

for(

int i =

1; i <= nums; i++

)else

}}

public

void

showboy()

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

boy curboy = first;

while

(true

) curboy = curboy.

getnext()

;}}

startno:從第幾個節點開始數

countnum:數幾下

nums:最初有幾個節點在圈中

public

void

countboy

(int startno,

int countnum,

int nums)

//建立輔助變數

boy helper = first;

//讓helper指向最後乙個節點

while

(true

) helper = helper.

getnext()

;}//報數前,先讓first和helper同時移動startno-1次

for(

int i =

0; i < startno -

1; i++

)//報數時,讓first和helper同時移動countnum-1次,然後出圈

while

(true

)//讓first和helper同時移動countnum - 1

for(

int i =

0; i < countnum -

1; i++

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

system.out.

println

("go out "

+ first.

getno()

);first = first.

getnext()

; helper.

setnext

(first);}

system.out.

println

("最後留在圈中的編號:"

+ first.

getno()

);}

public

static

void

main

(string[

] args)

資料結構 約瑟夫環

問題描述 約瑟夫環問題的一種描述是 編號為1,2,n的n個人按順時針的方向圍坐一圈,每個人持有乙個密碼 正整數 一開始任選乙個正整數作為報數的上限值m,從第乙個人開始按順時針方向自1開始順序報數,報到m時停止報數。報m的人出列,將他的密碼作為新的m值,從他的順時針方向上的下乙個人開始重新報數,如此下...

資料結構學習筆記(四)

這道題剛開始自己想沒有很好的思路來判斷輸入的序列是否構成同一棵二叉搜尋樹。關於要構造幾顆樹,輸入乙個序列構造乙個然後再將兩顆樹比較,還是只要構造一顆,還是不用構造?比較好的解決辦法是由第乙個序列構造一顆,之後輸入的序列裡的數再與這顆搜尋樹比較,來判斷。那麼怎樣判斷呢?可以發現如果乙個數插入時經過了之...

資料結構學習之路四

遞迴的玩法 遞迴的經典模型就是斐波那契數列和漢諾塔。具體的原理已經到處都是,我們直接從帶 開始看 斐波那契數列 public class fibonacci else if n 2 else 測試 public class testfibonacci 漢諾塔 所有的盤子剛開始都放在塔座a上,要求將所...