/*包含动态内存分配函数的头文件*/
#define N 10 /*N为人数*/
typedef struct node
{
char name[20].
struct node *link.
}stud.
stud * creat(int n) /*建立单链表的函数,形参n为人数*/
{
stud *p,*h,*s. /* *h保存表头结点的指针,*p指向当前结点的前一个结点,*s指向当前结点*/
int i. /*计数器*/
if((h=(stud *)malloc(sizeof(stud)))==NULL) /*分配空间并检测*/
{
printf("不能分配内存空间!").
exit(0).
}
h->name[0]= \0 . /*把表头结点的数据域置空*/
h->link=NULL. /*把表头结点的链域置空*/
p=h. /*p指向表头结点*/
for(i=0.i{
if((s= (stud *) malloc(sizeof(stud)))==NULL) /*分配新存储空间并检测*/
{
printf("不能分配内存空间!").
exit(0).
}
p->link=s. /*把s的地址赋给p所指向的结点的链域,这样就把p和s所指向的结点连接起来了*/
printf("请输入第%d个人的姓名",i 1).
scanf("%s",s->name). /*在当前结点s的数据域中存储姓名*/
s->link=NULL.
p=s.
}
return(h).
}
main()
{
int number. /*保存人数的变量*/
stud *head. /*head是保存单链表的表头结点地址的指针*/
number=N.
head=creat(number). /*把所新建的单链表表头地址赋给head*/
}
这样就写好了一个可以建立包含N个人姓名的单链表了。
写动态内存分配的程序应注意,请尽量对分配是否成功进行检测。