2013-08-18 21:27:50
迴圈鍊錶、陣列解決約瑟夫環問題的比較
注意幾點:
迴圈鍊錶的建立不難,在刪除迴圈鍊錶中元素時,用pcur->next != pcur判斷結束;每一輪計數開始,將計數器歸1,counter = 1;並將指標指向下乙個元素,pcur = pcur->next; //從下乙個元素開始計數
1 #include 2 #include 3using
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個人圍成的圈。節點的資料域存放遊戲者的編號。在程式中,以刪除節點模擬人退出圈子的處理...