一:單向環形鍊錶的結構
二:單向環形鍊錶的使用場景
josephu 問題為:設編號為 1,2,… n 的 n 個人圍坐一圈,約定編號為 k(1<=k<=n)的人從 1 開始報數,數到m 的那個人出列,它的下一位又從 1 開始報數,數到 m 的那個人又出列,依次類推,直到所有人出列為止,由此產生乙個出隊編號的序列。
用乙個不帶頭結點的迴圈鍊錶來處理 josephu 問題:先構成乙個有 n 個結點的單迴圈鍊錶,然後由 k 結點起從 1 開 始計數,計到 m 時,對應結點從鍊錶中刪除,然後再從被刪除結點的下乙個結點又從 1 開始計數,直到最後乙個結點從鍊錶中刪除演算法結束。
約瑟夫問題-小孩出圈分析圖
約瑟夫**實現:
boy實體類
package com.circlelinklist;
/** * @author lizhangyu
* @date 2021/3/6 22:16
*/public class boy
public int getno()
public void setno(int no)
public boy getnext()
public void setnext(boy next)
}
circlesinglelinklist實體類
package com.circlelinklist;
/** * @author lizhangyu
* @date 2021/3/6 22:17
*/public class circlesinglelinklist
boy curboy = null;
for (int i = 1; i <= num; i++) else }}
/*** 遍歷
*/public void list()
boy curboy = first;
while (true)
curboy = curboy.getnext();}}
/*** 小孩出圈
* @param startno
* @param countnum
* @param num
*/public void outlist(int startno, int countnum, int num)
boy helpboy = first;
while (true)
helpboy = helpboy.getnext();
}for (int i = 0; i < startno-1; i++)
while (true)
for (int i = 0; i < countnum-1; i++)
system.out.println("出圈的小孩為"+ first.getno());
first = first.getnext();
helpboy.setnext(first);
}system.out.println("最後出圈的小孩為" + first.getno());}}
circlesinglelinklistdemo實體類
package com.circlelinklist;
/** * @author lizhangyu
* @date 2021/3/6 22:18
*/public class circlesinglelinklistdemo
}
測試結果:
當前的小孩為:1
當前的小孩為:2
當前的小孩為:3
當前的小孩為:4
當前的小孩為:5
當前的小孩為:6
當前的小孩為:7
當前的小孩為:8
出圈的小孩為4
出圈的小孩為7
出圈的小孩為2
出圈的小孩為6
出圈的小孩為3
出圈的小孩為1
出圈的小孩為5
最後出圈的小孩為8
process finished with exit code 0
單向環形鍊錶
問題描述 設編號為 1,2,3,4 n的n個人圍坐一圈,約定編號為第k 1 k n 的那個人,從1開始報數,數到m的那個人出列,它的下一位又開始從1報數,數到m的那個人又出列,依次類推,知道所有人出列為止,由此產生了乙個出隊編號的序列。建立環形鍊錶並且遍歷 實現 public class josep...
單向環形鍊錶
建立孩子節點 孩子節點 class child public intgetno public void setno int no public child getnext public void setnext child next 建立環形鍊錶類,讓first節點為空 class circleli...
單向環形鍊錶
單向環形列表 單向環形列表 建立單向環形列表 先建立乙個節點,構成環形,並且讓first節點指向這個節點,這個first節點用來建立環形鍊錶 當我們後面建立的節點,依次新增到這個環形鍊錶中,定義乙個輔助變數temp指向first 遍歷環形鍊錶 定義乙個輔助節點temp指向first節點,通過乙個wh...