该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
主要问题在于删除约瑟夫环的数,结果一直出不来,看了好几天改了好几次都改不对
#include
#include
typedef struct ysf
{
int num;
struct ysf*next;
}YSF;
YSF*creat(int aa[])
{
int i;
YSF *head=NULL,*p1=NULL,*p2=NULL;
head=p1=p2=(YSF*)malloc(sizeof(YSF));
head->num=aa[0];
head->next=NULL;
for(i=1;i<10;i++)
{
p1=(YSF*)malloc(sizeof(YSF));
p1->num=aa[i];
p2->next=p1;
p2=p1;
p1->next=NULL;
}
p1->next=head;//这里我都指向头指针了
return head;
}
void list(YSF*head)
{
int i;
YSF*p=head;
for(i=0;i<10;i++)
{
printf("%d\t",p->num);
p=p->next;
}
}
YSF*del(YSF*head,int b[],int num)
{
YSF *p1,*p2;
int i=0;
p1=head;
while(b[i]%num!=0)
{
p2=p1;//存储p1
p1=p1->next;
if(i==9) i=0;//大于一次循环的时候i肯定要超过9,这时候需要把i置0
else
{
++i;//若没有大于9,就让i自增
}
if(b[i]==0) //这是相对大于一次循环说的,因为一次循环后,肯定有数被删了,被删的肯定被置0,只要被置0,就跳过
{
++i;// 如果是,就跳过这个数组元素
}
if(b[i]%num==0) //刚才不是自增了吗,所以要验证新的数组元素是不是我们想要的
{
printf("%d\n",b[i]);//如果是,就打印出来
b[i]=0;//并把我们想要的数置0,方便后面的循环检查
p2->next=p1->next;//链表同时删除这个数
p1=p1->next;
++i;//继续自增
}
}
}
int main()
{
YSF*head=NULL;
int m=3;
int a[]={1,2,3,4,5,6,7,8,9,10};
head=creat(a);//创建链表
list(head);//这个可以不用打印的,但是还是打印好了
del(head,a,m);
system("pause");
return 0;
}
--( ̄▽ ̄)我怎么可能天天作死嘛,我要是天天作死,我就从这个世界上消失!
|ㄏ( ̄▽ ̄)嗯?【背后一凉】有什么在拉我?
|∑(っ°Д°;)っ啊咧?!?!
|°Д°;)っ|救命!!!
|°;)っ救。。。命。。。
|っ救。。。
|-------