约瑟夫环的实现
用循环链表实现的,思路很简单,只是要注意指针的修改,编程基础差的容易出错。
/*约瑟夫环 - 循环链表实现Author : Milo.WangDate : 2012/9/15*/#include <iostream>using namespace std;typedef struct Node{int num;struct Node *next;} Node, *NodePtr;void JosephusRing(int n, int k, int m){NodePtr L = NULL, p, s;int i;for(i = 0; i < n; ++i){if(!L){L = p = (NodePtr)malloc(sizeof(Node));p->next = p;}else{NodePtr q = (NodePtr)malloc(sizeof(Node));q->next = p->next;p->next = q;p = q;}if(i+1 == k)s = p;p->num = i+1;}while(1){int i;for(i = 0; i < m-2; ++i){s = s->next;}printf("%d\n",s->next->num);p = s->next;s->next = p->next;free(p);if(p == s){break;}s = s->next;}}int main(int argc, char *argv[]){JosephusRing(10,1,5);return 0;}