1.建立单链表

(1)单链表建立过程分析

  1. 建立一个带头结点的单链表(以插入两个有效结点为例)的过程如下。<br /> A.建立空链表L<br /> 建立空链表示意图:<br /> ![](https://cdn.nlark.com/yuque/0/2020/png/1018905/1584505726093-c9680895-fb18-4221-b272-47dca328f6c3.png#align=left&display=inline&height=112&originHeight=148&originWidth=248&size=0&status=done&style=none&width=188)<br /> 相应的操作语句:<br /> LinkList *L,Node *s;<br /> L = (LinkList *) malloc (sizeof(Node)); //为头结点分配存储空间<br /> r = L; <br /> <br /> B.生成并插入第一个结点<br /> 生成并插入第一个结点示意图:<br /> ![](https://cdn.nlark.com/yuque/0/2020/png/1018905/1584505726172-4cc7d555-9e59-4252-9e08-aee00152dc11.png#align=left&display=inline&height=103&originHeight=145&originWidth=678&size=0&status=done&style=none&width=480)<br /> 相应的操作语句:<br /> s = (Node *) malloc (sizeof(Node)); //生成一个新结点 <br /> s -> data = a1 ; //将要插入数据元素的值赋给新结点的数据域<br /> s -> next = NULL; //链表末尾结点指针域为空<br /> r -> next = s; //将新结点插入到当前链表的表尾上<br /> r = s; //让指针r始终指向链表的当前表尾
  2. C.生成并插入第二个结点<br /> ![](https://cdn.nlark.com/yuque/0/2020/png/1018905/1584505726156-8c99ad2a-9df6-461c-8592-a33f9fb0a5d7.png#align=left&display=inline&height=117&originHeight=185&originWidth=917&size=0&status=done&style=none&width=580)<br /> s = (Node *) malloc (sizeof(Node)); //生成一个新结点 <br /> s -> data = a2 ; //将要插入数据元素的值赋给新结点的数据域<br /> s -> next = NULL; //链表末尾结点指针域为空<br /> r -> next = s; //将新结点插入到当前链表的表尾上<br /> r = s; //让指针r始终指向链表的当前表尾<br /> ** 课堂思考:**<br /> 要在链表的尾部继续依次插入a3、a4、......、an等结点,在程序设计上该如何实现?

(2)单链表建立算法

  1. ![](https://cdn.nlark.com/yuque/0/2020/png/1018905/1584505726741-1ce48ae2-bb09-4727-83b5-cb9ac5399f6f.png#align=left&display=inline&height=371&originHeight=741&originWidth=1159&size=0&status=done&style=none&width=580)