请问大家错在哪里,,
是用来求1000以内素数的 谢谢!
#include<stdio.h>
#include<stdlib.h>
typedef struct PRIME_LINK
{
int prime;
struct PRIME_LINK* next;
}su;
int panduan(int a)
{
int i;
for(i=2;i<a/2;i++)
{
if(a%i==0) return 0;
}
return 1;
}
int main()
{
int i,n;
su* p1,*p2,*head;
p2=(su*)malloc(sizeof(su));
for(i=2,n=0;i<1000;i++)
{
if(i==2||i==3||panduan(i)==1)
{
p1=(su*)malloc(sizeof(su));
p1->prime=i;
if(n==0) head=p1;
else p2->next=p1;
p2=p1;
n++;
}
}
for(i=0;i<=n;i++)
{
printf("%d ",(head+i)->prime);
}
}
你既然定义的是链表而不是数组,访问的时候为什么不写while+next,而是用head+i,地址是连续的吗你就+i
再说你建立链表的代码本身也是错的
p1为什么没有挂在头结点后面而是挂到p2后面去了,那head应该指向p2才对呀
head=p2=(su*)malloc(sizeof(su));这样就行了,不要到for循环里面再判断
使用链表地址不一定是连续的,所以遍历时候要进行指向下一个地址的操作,而不是head+i
最后打印的循环函数改一下
su* p = head;
while (p != p2->next)
{
printf("%d ", p->prime);
p = p->next;
}