在循环列表中,只要知道表中任一节点的地址,就能遍历到其它任一节点。

循环列表可用于求解约瑟夫问题。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream.h>
#include "CircList.h"
template <class T>
void Josephus(CircList<T>& Js, int n, int m) {
CircLinkNode<T> *p = Js.getHead(), *pre = NULL;
int i, j;
for (i = 0; i < n - 1; i++) {
for (j = 1; j < m; j++) {
pre = p;
p = p->link;
}
cout << "出列的人是" << p->data << endl;
pre->link = p->link;
delete p;
p = pre->link;
}
};
void main() {
CircList<int> clist;
int i, n, m;
cout << "输入游戏人数和报数间隔:";
cin >> n >> m;
for (i = 1; j <= n; i++) {
clist.insert(i);
}
Josephus(clist, n, m)
};