資料結構與演算法之環形鍊錶

2021-10-11 18:49:20 字數 2075 閱讀 2369

單向環形鍊錶介紹

josephu問題

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

n=5,即有5個人

k=1,從第乙個·人開始報數

m=2,數2下

提示

用乙個不帶頭結點的迴圈鍊錶來處理josephu 問題:先構成乙個有n個結點的單迴圈鍊錶,然後由k結點起從1開始計數,計到m時,對應結點從鍊錶中刪除,然後再從被刪除結點的下乙個結點又從1開始計數,直到最後乙個結點從鍊錶中刪除演算法結束。

約瑟夫問題建立環形鍊錶**

約瑟夫問題-小孩出窗思路分析

約瑟夫問題**實現

class

boypublic

intgetno()

public

void

setno

(int no)

public boy getnext()

public

void

setnext

(boy next)

}class

circlesinglylinkedlist

else}}

//遍歷環形鍊錶

public

void

list()

boy curboy=first;

while

(true

) curboy=curboy.

getnext()

;}}//通過環形鍊錶解決約瑟夫問題

/* startno表示從第幾個孩子開始數

countboy表示數幾下

num表示圈中有幾個孩子

*/public

void

countboy

(int startno,

int countboy,

int num)

//使輔助指標指向環形鍊錶的最後乙個節點

while

(true

) helper=helper.

getnext()

;}//找到開始報數的位子

for(

int i=

0;i1;i++

)while

(true

)//移動countboy-1次

for(

int i=

0;i1;i++

) system.out.

println

("出隊的節點使"

+first.

getno()

);first=first.

getnext()

; helper.

setnext

(first);}

system.out.

println

("最後乙個節點是"

+first.

getno()

);}}

public

class

josepfu

}

資料結構與演算法 環形鍊錶

約瑟夫 josephus 問題 約瑟夫問題 約瑟夫環 問題為 設編號為1,2,n的n個人圍坐在一起,約定編號為k 1 k n 的人 從1開始報數,數到m的那個人出列,他的下一列又從1開始報數,數到m的人出列,依次類推,直到所有人出列為止,由此產生乙個出隊編號的序列。方法 用乙個不帶頭結點的迴圈鍊錶來...

資料結構與演算法 鍊錶 雙向鍊錶和環形鍊錶

1 雙向鍊錶和單向鍊錶之間有什麼區別?答 雙向鍊錶和單向鍊錶之間最大的區別就是其多了乙個指向前乙個節點的指標域。2 雙向鍊錶對比於單鏈表有什麼優點?答 3 雙向鍊錶功能實現時和單向鍊錶有何區別?答 具體功能實現大體上沒有區別,在遍歷節點和修改節點兩個功能上只需要將節點修改為雙向節點,根本不需要進行其...

資料結構 環形鍊錶

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