c语言结构链表

来源:百度知道 编辑:UC知道 时间:2024/05/31 00:31:37
假设有这样的定义
#include <stdio.h>
struct num{
int number;
struct num *next; //这里定义*next 是为了申请1个字节的空间吗?
};
main(){
int i,j;
struct num *pf,*pb,*head;
for(i=0;i<50;i++){
pb=(struct num*) malloc(sizeof(struct num));
j=2*i+1;
pb->number=j;
if(i==0)
pf=head=pb;
else
pf->next=pb; //这里是把指针pb赋值给指针next,还是指针pb指向节点指针next??
pb->next=NULL;
pf=pb;
}
pb=head;
while(pb!=NULL){
printf("NUM : %d \t",pb->number);
pb=pb->next;
}
}

我不明白的就是,到底是指针指向节点指针next,还是赋值给它!
2个都是相同的结构指针啊,在pf->next=pb;这样的语句我理解为赋值还是指向呢?

//这里定义*next 是为了申请1个字节的空间吗?

不是,这里只是为了指向下一个节点,只占一个指针的大小.

//这里是把指针pb赋值给指针next,还是指针pb指向节点指针next??

当然是赋值,这样next就和pb指向同一块内存了啊.....

#include <stdio.h>
struct num{
int number;
struct num *next; //这里定义*next不是为了申请1个字节的空间,而是说明下一个结构体的地址是当前结构体的一个元素.
};
main(){
int i,j;
struct num *pf,*pb,*head;
for(i=0;i<50;i++){
pb=(struct num*) malloc(sizeof(struct num));
j=2*i+1;
pb->number=j;
if(i==0)
pf=head=pb;
else
pf->next=pb; //这里就是把下一个结构体首地址指针pb的值赋给指针next,其实就是指针next指向节点指针pb
pb->next=NULL;
pf=pb;
}
pb=head;
while(pb!=NULL){
printf("NUM : %d \t",pb->number);
pb=pb->next;
}
}

NEXT声明为 struct num型指针,用来指导向一个struct num 结构,
在pf->next=pb里,next是指针,pb 也是指针,意思是next也指向了pb所指向的struct num!之后你如果要访问pb->number,可以这样来:
pf->next->number;

指针是指向 next是指向下一节点的地址
pf->n