电脑
创建指向头节点的指针,空链表以学生结构体为例struct student{int num;char name[20]struct student *next; };typedef struct student STU; /*-- 将 struct student 取个别名为 STU */用malloc()函数 在物理内存中开辟一个空间,存放头节点;并定义一个 指向头节点的指针变量:STU* head=(STU*)malloc(sizeof(STU)); 进行防错处理 if(head==NULL) {printf('Error-01');exti(0);}将头节点的指针域为空,表示空链表 head->next=NULL;注意,此时头节点只是创建完毕,但并没有与第一个节点连接起来。
(3 ) 程序写到这里,整个链表中,实际只存在一个节点,即是头节点,又是尾节点。因此尾节点最开始也是指向头节点。tail=head;那么新节点最开始,是指向哪里?
为新节点申请内存空间在什么条件下才开始申请内存?比如,有链表长度个数之内,链表输入有效数据,未到达文件结尾等条件。本例是输入的数据为正的条件下。int new_num; while(1) /* 循环添加新节点 */ { printf('please input new num: '); sacnf('%d',&new_num);if(new_num>0){ pnew=(STU*)malloc(sizeof(STU)); /*并需要防错*/pnew->new_num; /* 为新节点赋值*/printf('please input new name: ');scanf('%s',pnew->name); /*为新节点赋值*/pnew->next=NULL; /* 以下是尾插法的关键的三句话*/tail->next=pnew; /*原链表尾节点指针域指向新节点*/tail=pnew; /*更新尾节点位置*/}else break;}/*循环创建完毕,即一般节点创建完毕,此时创建了头节点,也创建了一般节点,还需要将头节点与一般节点关联起来*/
pnew=head; /* 一句话:创建单向新链表,最开始时新节点,尾节点都指向头节点. .这么总结好像有点不恰当..*/head=head->next; /*head指针指向一般节点的第一个元素,即首节点*/free(pnew);
若是调用函数的方式来写链表,最后还要返回头节点return head;