約瑟夫環問題 迴圈鍊錶VS陣列

2021-09-06 11:39:04 字數 2691 閱讀 9094

2013-08-18 21:27:50

迴圈鍊錶、陣列解決約瑟夫環問題的比較

注意幾點:

迴圈鍊錶的建立不難,在刪除迴圈鍊錶中元素時,用pcur->next != pcur判斷結束;每一輪計數開始,將計數器歸1,counter = 1;並將指標指向下乙個元素,pcur = pcur->next;  //從下乙個元素開始計數

1 #include 2 #include 3

using

namespace

std;

45 typedef int

datatype;

67 typedef struct

node

8lnode,*plnode;

1213

14//

頭插法建立迴圈鍊錶

15 plnode creatcircularlink(plnode &phead,size_t n)

1633 --counter;34}

3536 ptail->next =phead;

37return

phead;38}

3940

//利用迴圈鍊錶,顯示出隊序列

41void displaysequenceofdequeue(plnode &phead,size_t n,size_t m)

4259 pnodetodelete = pcur->next;

60 pcur->next = pcur->next->next;

61 cout;62

delete pnodetodelete;

6364 pcur = pcur->next; //

從下乙個元素開始計數65}

6667 cout;68

delete pcur;

69 cout<7172

//顯示迴圈鍊錶

73void displaycircularlink(plnode &phead)

7483 cout;84 cout<8687 typedef struct

jrnode

88jrnode,*pjrnode;

92//

93//

void josephring(size_t n,size_t m,size_t *(&outqueue))

94//

105//

106//

index = 0;

107//

while (counter < n)

108//

116//

index = (index + 1) % n;

117//

++step;

118//

}119

//120

//inqueue[index].flag = false;

121//

outqueue[counter++] = index;

122//

123//

/*if (index == n)

124//

*/127

//128//}

129//

130//

delete inqueue;

131//

}132

133//

用陣列解決

134void circle_out(size_t n, size_t s, size_t m, size_t *p)

135155

//cout<<"pos = "<156

if(pos==0) //

此處必須對pos為0的情況進行特殊處理

157161

else

162

166}

167delete circle;

168}

169170

void displayarray(size_t *array,size_t len)

171180 cout<181182

}183

184//

測試約瑟夫環

185void

testcircularlink()

186209

}210

211int

main()

212

測試結果:

please enter n and m :52

(displaysequenceofdequeue)the sequence of dequeue is:

2415

3(circle_out)the sequence of dequeue is:

2415

3please enter n and m :53

(displaysequenceofdequeue)the sequence of dequeue is:

3152

4(circle_out)the sequence of dequeue is:

3152

4please enter n and m :

^z請按任意鍵繼續. . .

約瑟夫環問題(迴圈鍊錶)

這是一道比較經典的迴圈鍊錶問題,在華為上機筆試中也出現過。約瑟夫環是乙個數學的應用問題 已知n個人 以編號1,2,3.n分別表示 圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列 他的下乙個人又從1開始報數,數到m的那個人又出列 依此規律重複下去,直到圓桌周圍的人全部出列。includ...

約瑟夫環問題(迴圈鍊錶)

轉 約瑟夫環 是乙個數學的應用問題 已知n個人 以編號1,2,3.n分別表示 圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列 他的下乙個人又從1開始報數,數到m的那個人又出列 依此規律重複下去,直到圓桌周圍的人全部出列。include include typedef struct n...

迴圈鍊錶 約瑟夫環問題

正好這幾天在看資料結構,覺得鍊錶應用挺廣的,特寫一例項。問題描述 選首領。n個遊戲者圍成一圈,從第乙個開始順序報數1,2,3.凡報到3者退出圈子,最後留在圈中的人為首領。思路 建立乙個包含n個節點的單迴圈鍊錶來模擬n個人圍成的圈。節點的資料域存放遊戲者的編號。在程式中,以刪除節點模擬人退出圈子的處理...