目錄
一、約瑟夫問題介紹
二、約瑟夫問題演算法介紹
三、約瑟夫問題**實現
設編號為1,2,… n的
n個人圍坐一圈,約定編號為k(
1<=k<=n
)的人從
1開始報數,數到
m 的那個人出列,它的下一位又從
1開始報數,數到
m的那個人又出列,依次類推,直到所有人出列為止,由此產生乙個出隊編號的序列
。
1.首先構建乙個單向的環形鍊錶①先建立第乙個節點
, 讓
first
指向該節點,並形成環形
②後面當我們每建立乙個新的節點,就把該節點,加入到已有的環形鍊錶中即可.
2.按照需求建立乙個輔助指標(變數
) helper ,
事先應該指向環形鍊錶的最後這個節點.
補充: 小孩報數前,先讓
first
和helper
移動 k - 1次
3.當小孩報數時,讓
first
和 helper
指標同時的移動
m - 1 次
4.這時就可以將
first
指向的小孩節點出圈
first = first .next
helper.next = first
原來first
指向的節點就沒有任何引用,就會被**
public class josepfu
}class singlecirclelist
// 臨時指標,用來新增結點
boy curboy=null;
// 新增結點過程
for (int j=1;j<=nums;j++)else }}
// 遍歷迴圈單鏈表
public void showboy()
// 使用curboy來指向最開始的節點
boy curboy=first;
// 對迴圈單鏈表進行遍歷
while (true)
curboy=curboy.getnext();}}
// 解決約瑟夫問題
// k為約定編號
// m為報數個數
// n為圈人數
public void countboy(int k,int m,int n)
helper=helper.getnext();
}// 從第k個開始數
for (int j=0;jwhile (true)
for (int j=0;jsystem.out.println("小孩編號:"+first.getno());
first=first.getnext();
helper.setnext(first);}}
}class boy
public int getno()
public void setno(int no)
public boy getnext()
public void setnext(boy next)
}
鹹魚學資料結構和演算法 佇列(陣列實現)
目錄 一 佇列介紹 二 陣列模擬佇列介紹 三 陣列模擬佇列 實現 將尾指標往後移 rear 1 當front rear 空 若尾指標 rear 小於佇列的最大下標 maxsize 1,則將資料存入 rear所指的陣列元素中,否則無法存入資料。rear maxsize 1 佇列滿 system.out...
鹹魚學資料結構和演算法 單鏈表反轉
目錄 一 單鏈表反轉演算法介紹 二 單鏈表反轉 實現 1.先定義乙個節點 reversehead new heronode 2.從頭到尾遍歷原來的鍊錶,每遍歷乙個節點,就將其取出,並放在新的鍊錶 reversehead 的最前端.3.原來的鍊錶的 head.next reversehead.next...
演算法和資料結構 約瑟夫問題
package com.structure.demo import android.os.bundle import android.util.log public class josephactivity extends activity class circlesinglelinkedlist ...