•
1 min read

循环列表

Archive · written in 2008

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

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

#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)
};