#include <stdio.h>
#include <stdlib.h>
typedef struct student
{
char num [20];
char name [20];
struct student * next; //创建指针域
}STU; //创建结构体
int create(STU *&h,int n) //需改变h,加上&,传递地址
{
STU *p1,*p2; //p1:新指针,p2:尾指针
for(int i=0;i<n;i++){
p1=(STU *)malloc(sizeof(STU));
//malloc头文件stdlib.h。malloc输出无类型的指针,所以要进行强制性转化。
if(p1==NULL)
return -1; //创建新结点失败,则返回
scanf("%s%s",p1->num,p1->name);
p1->next=NULL; //使最后的指针为NULL,成为print中推出循环的要素
if(i==0) //h为头结点
h=p1;
else
p2->next=p1; //新结点插入到链表尾
p2=p1; //尾指针指向当前的尾结点
}
return 1;
} //构建线性链表
void print(STU *h)
{
STU *p;
for(p=h;p!=NULL;p=p->next)
printf("%10s%10s\n",p->num,p->name);
} //输出线性链表
int main()
{
STU * h=NULL,* p;
int n;
scanf("%d",&n);
int result;
result=create(h,n);
if(result==-1){
printf("Error!");
return 0;}
print(h);
}
1、malloc 和 calloc
calloc 能初始化所分配的空间,在动态分配完后,自动初始化为0。、
2、链表的连接
在p1申请空间时,地址不为连续,需要p2连接链表。