用单向循环链表解决约瑟夫环问题

来源:互联网 发布:帝国cms 系统模型 编辑:程序博客网 时间:2024/04/29 08:30

#include <stdio.h>
#include "stdlib.h"
struct ele{
int no;
struct ele *link;
}
main()
{

struct ele *h,*u,*p;
        int n,m,i;
printf("Please input n&m:/n");
scanf("%d%d",&n,&m);/*输入n和m*/
h=u=(struct ele *)malloc(sizeof(struct ele));/*形成首表元*/
h->no=1;
for(i=2;i<=n;i++)/*形成其余的n-1个表元*/
{
u->link=(struct ele *)malloc(sizeof(struct ele));
u=u->link;
u->no=i;/*第i个表元置编号i*/
}
u->link=h;/*末表元后继首表元,形成环*/
puts("/nThe numbers of who will quit the cycle in turn are:");
while(n)
{
for(i=1;i<m;i++)/*掠过m-1个表元*/
u=u->link;
p=u->link;/*p指向第m个表元*/
u->link=p->link;/*第m个表元从环中脱钩*/
printf("%4d",p->no);
free(p);/*释放第m个表元占用的空间*/
n--;
}
printf("/n/n Press any key to quit.../n");
getchar();
}


原创粉丝点击