資料結構 05 單向環形鍊錶 約瑟夫問題

2021-10-05 05:21:42 字數 1900 閱讀 7317

/** * 約瑟夫 環形鍊錶解決 小孩丟手絹

* @author anqi

* @date 2020/4/15 09 54:59

* @description

*/public

class

josepfu

}//建立環形單向鍊錶

class

circlesinglelinkedlist

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

boy helper = first;

//將 helper 指向 鍊錶的最後乙個節點

while

(true

) helper=helper.

getnext()

;}//報數前 將first 和 helper 移動k-1次

for(

int j =

0;j< startno -

1;j++

)//報數時 同時移動countnum-1 知道圈中只有乙個節點

while

(true

)//移動countnum-1

for(

int j =

0;j1;j++

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

system.out.

printf

("編號:%d 小孩出圈\n "

,first.

getno()

);//這時將first指向的小孩節點出圈

first = first.

getnext()

; helper.

setnext

(first);}

system.out.

printf

("最後留在圈中的小孩編號%d \n"

,first.

getno()

);}//遍歷鍊錶

public

void

showboy()

//輔助指標

boy curboy = first;

while

(true

) curboy = curboy.

getnext()

;//後移}}

//新增節點,構建環形鍊錶

public

void

add(

int nums)

boy curboy = null;

//輔助變數

//for 迴圈建立環形鍊錶

for(

int i =

1; i<= nums;i++

)else}}

}//建立乙個boy類,作為節點

約瑟夫問題 單向環形鍊錶

約瑟夫問題的示意圖 josephu 問題 josephu 問題為 設編號為 1,2,n 的 n 個人圍坐一圈,約定編號為 k 1 k n 的人從 1 開始報數,數到 m 的那個人出列,它的下一位又從 1 開始報數,數到 m 的那個人又出列,依次類推,直到所有人出列為止,由此 產生乙個出隊編號的序列。...

單向環形鍊錶(約瑟夫問題)

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

單向環形鍊錶 約瑟夫問題

如圖,鍊錶的最後乙個節點的next指向鍊錶的第乙個節點,形成乙個環形鍊錶。josephu 約瑟夫 約瑟夫環 問題 設編號為1,2,3 n的 n個人坐成一圈,編號為k 1 k n 的人從1開始報數,數到m的那個人出列,他的下一位繼續從1開始報數,數到m的那個人又出列,依次類推,直到所有人出列為止,由此...