1.研究的是带头结点的单链表
单链表是由表头唯一确定的,因此单链表可以用头指针的名字来命名,若头指针名是L,则把链表称为表L。
2.单链表的存储结构
typedef struct Lnode{ //声明结点的类型和指向结点的指针类型
ElemType data; //结点的数据域
struct Lnode *next; //结点的指针域
}Lnode,*LinkList //LinkList为指向结构体Lnode的指针类型
//加*表示这个类型是指针型
里面的struct Lnode *next
是自己定义自己,称为嵌套定义
Lnode
=LinkList node
表示链表中的结点
*LinkList
表示指向这个结点的指针,再定义就不需要加*了,直接LinkList L
例如定义一个Lnode a
,定义了一个a结点
如果是个地址则定义Lnode *p
**链表是结点的集合,0个或多个结点组成一个链表。
节点的结构:数据域(记录数据),指针域(指向下一个结点)
链表的结构:类型1:若干结点依次相连;**
链表和结点的类型是一样的,链表是结点的集合,所以为了区分定义结点和定义列表,我们在定义的时候定义链表我们一般用LinkList L
,定义结点的时候用Lnode a
,其实本质上没有什么区别,但是为了更好的区分因此采用不同的定义方式,而且链表的名字存放的就是这个表的首地址,所以是指针类型,在定义结构体的时使用的是*LinkList
,这里的*就表示指向这个结构体的指针类型。
<br/>
3.为了统一链表的操作,通常这样定义
4.初始化单链表
可以使头结点的指针域为NULL,则可以初始化单链表
L->head = NULL;
访问头结点的指针域head为使其为空