此程序错在哪?(约瑟夫环)
约瑟夫
#include<stdio.h>
#include<stdlib.h>
struct data{
int num;(输值时依次为1,2,3,4........)
int sec;
struct data *next;
}
main()
{struct data *result (struct data *head1);
struct data *prin (struct data *head2);
int n;int m=1;
struct data *head;
struct data *p1,*p2;
printf("please putin the count of your struct: ");
scanf("%d",&n);
while(m<=n)
{if(m==1) p2=head=p1=(struct data*)malloc(sizeof(struct data));(建链表)
else p1=(struct data*)malloc(sizeof(struct data));
p2->next=p1;
p2=p1;
printf("putin the data of present struct :\n ");
scanf("%d,%d",&p1->num,&p1->sec);
m++;
}
p1->next=head;
prin(head);
printf("\n");
result(head);
}
/实现主要功能/(可能这里错了)
struct data * result(struct data *head1)
{struct data *p1,*p2;int i,a;
p2=p1=head1;
printf("the number you want to circle firstly:\n");
scanf ("%d",&a);
printf("the result is:\n");
while(p2!=p2->next&&p1!=p1->next)
{ {for(i=1;i<=a;i++)
p2=p1;
p1=p2->next;
}
printf("%d,%d\n",p1->num,p1->sec);
a=p1->sec;
p2->next=p1->next; p1=p1->next;
}
if(p1==p1->next) printf("%d,%d",p1->num,p1->sec);
else printf("%d,%d",p2->num,p2->sec);
}
/输出链表/
struct data *prin(struct data *head2)
{struct data *p1,*p2;
p1=head2;
printf("%d,%d ",p1->num,p1->sec);
p1=head2->next;
while(p1!=head2)
{printf("%d,%d ",p1->num,p1->sec);
p1=p1->next;
}
}