线性表应用:约瑟夫问题(猴子选大王)(循环链表,数组,递归)
1 描述:一群猴子要选新猴王。新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号。从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数。 2 如此不断循环,最后剩下的一只猴子就选为猴王。请问是原来第几号猴子当选猴王? 3 //用循环链表 4 #include<stdio.h> 5 #include<stdlib.h> 6 7 typedef struct node 8 { 9 int data; 10 struct node *next; 11 }node; 12 13 node *create(int n) 14 { 15 node *head; 16 node *p = NULL; 17 head = (node *)malloc(sizeof(node)); 18 p = head; //p为指向当前结点的指针 19 node *s; 20 int i = 1; 21 22 if(n != 0) 23 { 24 while(i <= n) 25 { 26 s = (node *)malloc(sizeof(node)); //临时的结点 27 s->data = i++; //第一个结点的值为1 第二个结点的值为2 先给值i才++ 28 p->next = s; //头结点的指针域指向第一个结点 29 p =