五 環形鍊錶和約瑟夫問題

2021-10-09 16:46:22 字數 1618 閱讀 8227

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

例如編號為12345的環形鍊錶,從1開始,則出隊編號為:2—>4—>1—>5—>3.

package jusepfu;

public

class

josepfu

}class

circlesinglelinkedlist

boy curboy = null;

for(

int i =

1;i <= nums ; i++

)else}}

public

void

showboy()

boy curboy = first;

while

(true

) curboy = curboy.

getnext()

;}}public

void

countboy

(int startno,

int countnum,

int nums)

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

boy helper = first;

while

(true

) helper = helper.

getnext()

;}//將helper和startno向後移到startno處

for(

int j =

0; j< startno -

1;j++

)//開始出圈

while

(true

)for

(int i =

0; i < countnum-

1; i++

) system.out.

printf

("小孩%d出圈\n"

,first.

getno()

);first = first.

getnext()

; helper.

setnext

(first);}

system.out.

printf

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

,first.

getno()

);}}

class

boypublic

intgetno()

public

void

setno

(int no)

public boy getnext()

public

void

setnext

(boy next)

}

小孩2出圈

小孩4出圈

小孩1出圈

小孩5出圈

最後留在圈中的小孩編號為3

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

當n 5 m 2,k 1時出佇列的順序 2 4 1 5 3 乙個節點也能形成環鏈 構建乙個單向的環形鍊錶思路 1.先建立第乙個節點,讓first指向該節點,並形成環形.2.後面當我們每建立乙個新的節點,就把該節點,加入到已有的環形鍊錶中即可.public void addnode int nums ...

單項環形鍊錶介紹和約瑟夫問題

josephu 問題為 設編號為1,2,n的n個人圍坐一圈,約定編號為k 1 k n 的人從1開始報數,數到m 的那個人出列,它的下一位又從1開始報數,數到m的那個人又出列,依次類推,直到所有人出列為止,由此產生乙個出隊編號的序列。先建立第乙個節點,讓 first 指向該節點,並形成環形 後面當我們...

1 6 單向環形鍊錶和約瑟夫問題

約瑟夫問題 實現思路 實現 public class circlesinglelinkedlistdemo 單向環形鍊錶類 class circlesinglelinkedlis children current null 尾指標 指向下乙個節點為頭節點的節點 方便插入,不需要每次都遍歷 for i...