实体店国美投诉电话:建立链表的问题!c的。

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/29 10:27:58
#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; /*这句的作用是什莫?请详细解答一下,谢谢!!*/
pf=pb;
这句是何作用?

pf为前结点,pb为后结点!!!

建立链表有两种方式.从头部建立结点.和从尾部建立结点两种.从你这个程序来看应该是从尾部建立结点.
pb->next=NULL; 从这个语句来看.pb所指向的应该是尾结点.
else pf->next=pb;从这个语句来看.pf所指向的应该是尾结点的前一个结点.
if(i==0)
pf=head=pb; 这个两语句是当链表中只有一个结点时.pf和pb 都指向头结点
else pf->next=pb;
pb->next=NULL; 这两个语句是处理头结点以后的结点.
当建立头结点以后.再在内存中建立一个结点时.因为是在尾部插入结点.所以pb所指的不应该是尾结点了pf->next=pb;这个语句将pb指针指向尾结点.因为尾结点是为空的所以要有pb->next=NULL; 这个语句.
pf=pb; 因为还要插入结点.pf所指的应该是pb所指结点的前一个结点.如果pf指针不移向尾结点的话.当再建立一个结点时.它所指的就不是尾结点的前一个结点了.

这好象是C语言中的单向链表
而且是动态开辟的
由scanf 进行用户输入
决定是否要开辟新的链表

看程序的意思:head是表头指针,pf是表尾指针(我不知道有没有“表尾指针”这个词,总之就是指向链表最后一个结构的指针了^_^)。而 pf=pb; 这一句就是在链表末尾创建了一个结构之后,修改表尾指针指向这个“新的末尾”。