在循环列表中,只要知道表中任一节点的地址,就能遍历到其它任一节点。
循环列表可用于求解约瑟夫问题。
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) };
|