小言_互联网的博客

数据结构C语言版——约瑟夫环

418人阅读  评论(0)
  • 线性的应用
    • 约瑟夫环
    • 编号分别为: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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场