(转)约瑟夫环主要是有两个知识点:
1 循环链表的建立
2 循环链表的查找
源代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct LNode{
int number;
int data;
struct LNode *next;
}LNode,*LinkList;
int main(){
int n,m;
LinkList L,p,q,end;
void createList(LinkList &L,int n);
printf("please Input student counts:/n");
scanf("%d",&n);
printf("please input the first student number:/n");
scanf("%d",&m);
createList(L,n);
printf("the result is:");
p=L;
q=end;
while(p->next!=p){
for(int i=m;i>1;i--){
p=p->next;
q=q->next;
}
q->next=p->next;
p->next=NULL;
printf("%d",p->number);
m=p->data;
free(p);
p=q->next;//使p仍指向q的下一个元素
}
printf("%d",p->number);
free(p);
system("pause");
return 0;
}
void createList(LinkList &L,int n){
int i;
LinkList p,q,end;
L=(LinkList)malloc(sizeof(LNode));//linkList前边不可以再加STRUCT
p=L;
p->number=1;
printf("please input 1th data/n");
scanf("%d",&p->data);
for(i=2;i<n;i++){
q=(LinkList)malloc(sizeof(LNode));
q->number=i;
printf("please input %dth data/n",i);
scanf("%d",&q->data);
p->next=q;
p=q;
}
end=p;
p->next=L;
}