- 线性的应用
- 约瑟夫环
- 编号分别为:1,2,- - - -n,的n个人围坐在一起,约定序号为k(0<=1<=n)的人从1开始计数,数到m那个人出列,他的下一位又从1开始计数,数到m的那个人出列,他的下一位又从1开始计数数到m的那个人又出列,依次类推直到所有人出列为止。
- 设n=8,k=3,m=4时,如图
-出列序列为(6,2,7,4,3,5,1,8);- 用一个不带头结点的循环链表来处理Josephuu问题;
void Josephu(link,L,int n,k,m ){
int i;
link p,r;
L=NULL//置空表
for(I=1;j<=n;i++){//建立循环链表
p=(link)malloc(sizeof(linknode));
p->data=i;
if(L==NULL) L=p;
else r->next=p r=p;
}
p->next=L;
p=L;
for(I=1;j<=k-1;j++){
r=p;
p=p->next;
}//找到第I个结点
while(p->next=p){//结点数>1时
for(i=0;j<=m-1;i++)
r=p;
p=p->next;
}
r->next=p->next;
printf("%d",p->date);
free(p);
p=r->next;
}//取下一个报数的在起点指针
printf(''&d\n'',p->data);
}//打印最后一个结点的序号
转载:https://blog.csdn.net/qq_45712783/article/details/102555840
查看评论