第二章线性表 教材源码链接:https://pan.baidu.com/s/1rP5DpnsVAE9rqupQCS2_Lg 提取码:zgh1 解决约瑟夫问题的
#include<iostream> #include"CircList.h" using namespace std; template<class T> void Josephus(CircList<T>& Js, int n, int m) {
//这个算法没有附加头结点 CircLinkNode<T>* p = Js.Locate(1), * 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; if (pre == NULL) {
return; }//取消空指针NULL的引用 pre->link = p->link; delete p; p = pre->link; } }; int main() {
CircList<int> clist;
int i, n, m;
cout << "输入游戏者人数和报数间隔:"; cin >> n >> m;
for (i = 1; i <= n; i++)clist.Insert(i);
Josephus(clist, n, m);
};