struct stu
{
int num;
int age;
struct stu *next;
};
struct stu *creat(int n)//返回指针的指针函数
{
struct stu *head, *p_last, *p_new;
int i;
for (i = 0; i<n; i++)
{
p_new = (struct stu*)malloc(sizeof(struct stu));//指针pb指向结构体指针函数
printf("input Number and Age\n");
scanf("%d %d", &p_new->num, &p_new->age);//结构体成员赋值
if (i == 0)
p_last = head = p_new;//复制地址
else
p_last->next = p_new;//将地址赋给上一个地址的next
p_new->next = NULL;//清空
p_last = p_new;//更新
}
return(head);
}
在函数外首先用宏定义对三个符号常量作了定义。这里用TYPE表示struct stu,用LEN表示sizeof(struct stu)主要的目的是为了在以下程序内减少书写并使阅读更加方便。结构stu定义为外部类型,程序中的各个函数均可使用该定义。
creat函数用于建立一个有n个结点的链表,它是一个指针函数,它返回的指针指向stu结构。在creat函数内定义了三个stu结构的指针变量。head为头指针,pf 为指向两相邻结点的前一结点的指针变量。pb为后一结点的指针变量。在for语句内,用malloc函数建立长度与stu长度相等的空间作为一结点,首地址赋予pb。然后输入结点数据。如果当前结点为第一结点(i==0),则把pb值 (该结点指针)赋予head和pf。如非第一结点,则把pb值赋予pf 所指结点的指针域成员next。而pb所指结点为当前的最后结点,其指针域赋NULL。 再把pb值赋予pf以作下一次循环准备。
creat函数的形参n,表示所建链表的结点数,作为for语句的循环次数。图7.4表示了creat函数的执行过程。