请问这个程序错在哪里?大家帮忙看一下
看到有人说约瑟夫环,用链表编了一下,编了半天,就是不出来,请高手帮我看一下。可能就是小问题,不过我现在头晕眼花,就是找不出来,大家帮帮忙啊。。谢谢了
程序代码:
#include "stdio.h"
#include "stdlib.h"
struct ring
{int number;
struct ring *next;
};
struct ring *create(int n) //创建约瑟夫环
{ struct ring *head,*p,*q;
int i;
head=q=NULL;
for(i=0;i<n;i++)
{ p=(struct ring *)malloc(sizeof(struct ring));
p->number=i; //开辟新节点ok
if(head==NULL) head=p;
else q->next=p;
q=p;
}
q->next=head;
return(head);
}
struct ring * delete(struct ring *q) //删除节点
{ struct ring *p;
p=q;
while(p->next!=q) //因为是循环链表,所以这种方法可以找到上一节点
p->next=q->next;
return(p->next);
}
void josephu(struct ring *p,int m,int n) //环操作
{ int i,j;
for(i=1;i<m;i++)
{ for(j=0;j<n;j++)
p=p->next;
printf("%d",p->number);
p=delete(p);
}
}
main() //主函数
{ struct ring *h=NULL;int m,n;
printf("\nInput m and n:");
scanf("%d%d",&m,&n); //m为总人数,n为每次数的数
h=create(m);
josephu(h,m,n);
}[[it] 本帖最后由 紫ing~ 于 2009-8-4 23:40 编辑 [/it]]








