单链表问题

来源:百度知道 编辑:UC知道 时间:2024/05/23 17:01:27
#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);
}
这是教程上面的源程序,请帮忙修改为,创建含10个节点的单链表。输入学生的学号,和年龄。再输出结点中的数据。其中有一点不明白,创建10个节点,是在哪里体现出来的。是不是(int n)n就是10 for语句后面的程序可不可以解释一下。谢谢尽量简单一些。自学,不是很懂。谢
就是修改一下程序。把结点中的数据。输出到显示屏上面。

1、修改为创建含10个节点的单链表:答: 把你的程序中的n改为10即可。
2、创建10个节点,是在哪里体现出来的?答:pb=(TYPE*) malloc(LEN); 这条语句就是创建一个空节点,并为该节点分配内存空间,由指针pb指向。要创建10个节点,就要用10次这个语句,用循环来实现。
3、10 for语句后面的程序可不可以解释一下?答:现在就解释给你听:(//以后的中文为注释)
for(i=0;i<n;i++) //i为节点号,指向当前节点,n为所需节点个数,i可以等于0、1、2、3、4、5、6、7、8、9,正好十个节点,当i为10时,就创建了第11个节点,所以必须对i的范围加以限制!
{
pb=(TYPE*) malloc(LEN); //创建一个空节点,由pb指向,并为它分配内存空间
printf("input Number and Age\n"); //提示输入
scanf("%d%d",&pb->num,&pb->age); //用户输入两个直后,程序将这两个直依次存放在刚才创建的空节点的num和age中
if(i==0) //判断当前创建的是否第一个节点
pf=head=pb; //如果是,则pf->head->pb,pf和head指针都指向pb所指向的节点.顺便说一下,pb应该一直指向当前创建的新节点,pf指向当前链表的最后一个节点,pf相当于pb的影子
else pf->next=pb; 如果不是,则当前pb指向的节点不是第一个节点,此时pb指向的那个节点还未被连接到链表中,而此时pf指向当前链表的最后一个节点,pf->next就是pf所指向的节点的指针部分,pf->next=pb该节点的指针部分指向pb,就将建立的新节点连到链表中了
pb->next=NULL; //pb指针的后节点指向空值,此时当前最后一个节点由pb指向
pf=pb; //pf指向pb指向的节点,即指向当前链表的最后一个节点(在一开始我们就定义好pf是指向当前链表的最后一个节点(这是循环的最后一个语句,当再次执行循环时,pb又指向了新创建的节点,用ma