约瑟夫环编译通过,可是不能运行

来源:百度知道 编辑:UC知道 时间:2024/06/06 19:01:55
#include <stdlib.h>
#include <stdio.h>
#define NULL 0
typedef struct point
{
int data;
int No;
struct point *next;
}LNode,*LinkList;

int n,m;
LinkList create()
{
int i;
LinkList head,tail,neww;
head=NULL;
printf ("\n input n (总人数): ");
scanf ("%d",&n);
printf ("\n input m : ");
scanf ("%d",&m);
for (i=1;i<=n;i++)
{
neww=(LinkList)malloc(sizeof (LNode));
neww->No=i;
if (head==NULL)
{
head=neww;
tail=head;
}
else
{
tail->next=neww;
tail=neww;
}
tail->next=head;
return head;
}
}
void search (LinkList head)
{
int count,num;
LinkList pre,p;
num=0;count=1;
p=head;
printf ("\n output data : ");
while (num<n)
{
while (co

你的程序错在两个地方。
1.在函数create里面:
LinkList create()
{
int i;
LinkList head,tail,neww;
head=NULL;
printf ("\n input n (总人数): ");
scanf ("%d",&n);
printf ("\n input m : ");
scanf ("%d",&m);
for (i=1;i<=n;i++)
{
neww=(LinkList)malloc(sizeof (LNode));
neww->No=i;
if (head==NULL)
{
head=neww;
tail=head;
}
else
{
tail->next=neww;
tail=neww;
}
tail->next=head; //这一句的作用是最后将链表做成一个循环链表,这一句应该在循环之外,所以应该把下面的一个大括号提到这一句的前面
return head;
}
}
2.在search函数里面。
void search (LinkList head)
{
int count,num;
LinkList pre,p;
num=0;count=1;
p=head;
printf ("\n output data : ");
while (num<n)
{
while (count<m)
{
count++;
pre=p;
p=p->next;
}
printf("%3d",p->No);