該節點類中只有孩子的編號,以及指向下乙個節點的"指標"
packagecom.ebiz.list.josepfu;
/***
@author
yhj * @create 2019-07-17 22:21
* 表示節點的類 */
public
class
boy
public
intgetno()
public
void setno(int
no)
public
boy getnext()
public
void
setnext(boy next)
@override
public
string tostring()
}
2.定義單向鍊錶類
需要注意的是,josef問題是頭尾相連的,在這也就是最後乙個節點需要指向第乙個節點,如果只有乙個節點,那麼該節點需要指向節點本身.
解決josef問題,關鍵是理解最後的josef方法.
packagecom.ebiz.list.josepfu;
/***
@author
yhj * @create 2019-07-17 22:16
* 環形單項鍊表 */
public
class
singlecirclelist
//建立輔助節點
boy temp=null
;
//新增節點
for (int i = 1; i <=num ; i++) else}}
//遍歷環形鍊錶
public
void
list( )
//定義輔助指標
boy temp=firstboy;
while (true
) temp=temp.getnext();}}
/*josepfu問題的實現
根據使用者的輸入,生成小孩出圈的順序
k:從**開始
m:數幾下
num:玩遊戲的小孩的數量
*/public
void josepfu(int k,int m,int
num)
if(firstboy.getno() == -1)
//建立輔助指標 幫助小孩完成出圈
boy temp=firstboy;
//迴圈遍歷,將該輔助指標指向最後乙個,即firstboy前乙個
while (true
) temp=temp.getnext();
}// 報數之前.讓first 和temp移動到對應位置 在k處報數,讓first和temp移動k-1,
//移動到開始報數的孩子身上
for (int i = 1; i <=k-1 ; i++)
while (true
)
//開始報數,第k個孩子,即firstboy當前指向的孩子
//報m個數,,從第k個孩子本身報數,所以firstboy移動m-1次,temp也移動m-1次
for (int i = 1; i <=m-1 ; i++)
//上面迴圈結束時,firstboy指向要出去的孩子
system.out.printf("小孩%d出圈",firstboy.getno());
//這是將firstboy指向將要出去的孩子的下一位,並且temp的next指向他
firstboy=firstboy.getnext();
temp.setnext(firstboy);
}system.out.printf("最後留在圈中的小孩編號%d",firstboy.getno()); //
或者temp
}}
packagecom.ebiz.list.josepfu;
/***
@author
yhj * @create 2019-07-18 9:30 */
public
class
test
}
資料結構之單向環形列表No 7
package main import fmt 定義貓的結構體結點 type catnode struct 新增 func insertcatnode head catnode,newcatnode catnode temp head for temp temp.next temp.next new...
資料結構 環形單鏈表解決約瑟夫問題
1.單向環形鍊錶使用場景 joseph問題 設編號為1,2,3 n的小朋友圍成一圈,設定編號為k的人開始報數,數到m的那個人出列,他的下一位從1開始又重新報數,依次類推,直到所有人出列。思路分析 用乙個不帶頭節點的環形鍊錶來處理,先構成乙個有n個節點的環形單鏈表,然後由k節點開始報數,報到m時,對應...
資料結構之單向佇列
注意事項 front頭指標指向的是佇列首元素的前乙個位置 rear尾指標指向隊尾元素 這是 實現 首先先建立乙個佇列類 class myquene 判斷佇列是否滿 public boolean isfull 判斷佇列是否為空 public boolean isempty 新增資料到佇列 public...