关于 C语言链表(linklist)

来源:百度知道 编辑:UC知道 时间:2024/09/28 13:21:28
一个很基础的程序:
#define NULL 0
#define TYPE struct stu
#define LEN sizeof (struct stu)
struct stu
{
int num;
int age;
struct stu *next;
};
TYPE *creat(int n)
{
struct stu *head,*pf,*pb;
int i;
for(i=0;i<n;i++)
{
pb=(TYPE*) malloc(LEN);
printf("input Number and Age\n");
scanf("%d%d",&pb->num,&pb->age);
if(i==0)
pf=head=pb;
else pf->next=pb;
pb->next=NULL;
pf=pb;
}
return(head);
}

中,
是如何实现的链表循环的,最后的pf=pb是什么意思,
pb->next=null是在干什么,
每次循环时malloc的意思是重新分配一个pb的意思么?
还是不太明白,每个结点的概念是什么呢?结点存在在哪?
pb,head和pf都是指向结点的指针,不是实际存储数据的结点,可数据究竟储存到了什么地方?
如果这样可以储存n个数据的话,如何把保存在结点的数据输出呢?

好象不是循环链表吧.....
pf=pb//这句是看你是否真正懂了整个创建过程,pb是指像当前最新创建的结点,而pf则指向上一个结点 每次从开始循环 pb指向新创建的结点 之后利用pf->next=pb来挂结点 而最后 pf指向pb 准备迎接下一个结点 当下一个结点来时
pb又指向新的结点 而pf 指向刚刚创建的结点 利用 pf->next=pb把pb挂在pf后面

pb->next=null 是在把新的结点的next域指定为空 也是一个初始化

malloc 是申请一块内存空间来给新的结点 如果不去申请的话 新的结点放哪? 我们创建的东西都是凭空想象的 但是最后都要写到计算机里面 分配一块内存空间大概就是这个意思

i==0时,pf是个空链表,这时pf=head=pb;就是pb指向这个链表的头节点,因为这时的链表下个单元为空
pb->next=null是把带头节点的循环单链表设置成首尾相连的形式,从而达到循环的目的。
malloc函数用于向系统动态申请LEN个字节的内存单元空间,函数返回值为所申请的内存空间首地址

pf=pb 让pf指向最后一个结构体,方便下一次操作

pb->next=null是pb的下一个节点置空

分配一个堆空间,作存储用