單向環形鍊錶,約瑟夫問題(丟手帕)

2021-10-06 11:24:42 字數 1412 閱讀 2064

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();}}

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

/*/**

*@author: diandian.yi on 2020/5/25 14:50

*@params: [startno表示從第幾個小孩開始數數, countnum表示數記下, nums表示最初有多少個小孩在圈中]

*@return: void

*@description:

*/public void countboy(int startno,int countnum,int nums)

//建立要給輔助指標,幫助小孩出圈

boy helper = first;

// 事先應該指向環形鍊錶的最後乙個節點

while (true)

helper = helper.getnext();

}// 移動到第k個節點,first和helper移動k-1次

for(int j=0;j// 2.當小孩報數時,讓first和helper指標同時的移動m-1次

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

while(true)

// 2.當小孩報數時,讓first和helper指標同時的移動countnum次

for(int j=0;j//first是要出圈的節點

system.out.printf("小孩%d出圈\n",first.getno());

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

first = first.getnext();

helper.setnext(first);

}system.out.printf("最後乙個小孩節點%d \n",first.getno());

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

class boy

public int getno()

public void setno(int no)

public boy getnext()

public void setnext(boy next)

}

丟手帕問題的雙向環形鍊錶實現

問題 設編號為1 2 n的幾個小孩圍坐一圈,約定編號為k 1 我們現在用乙個雙向環形鍊錶來解這一問題。先來看看下面這幅圖 圓圈代表乙個結點,紅色的指標指向下乙個元素,紫色的指標指向上乙個元素。first指標指向第乙個元素,表明第乙個元素的位置,cursor是游標指標,它的作用重大。那麼這個環形的鍊錶...

約瑟夫問題 單向環形鍊錶

約瑟夫問題的示意圖 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...