单链表
头指针用来记录链表第一个元素的地址,链表名可以取头指针名
头指针为空,证明链表是空表
结点:数据元素的存储映像
数据域
指针域
- 你可以选择把箭头理解成指向元素的地址(因为你也不知道那个地址具体是什么)
- 其指针的定义为嵌套定义(定义的类型为所在结构体类型)
- Lnode:普通的(结点)结构体类型变量,可以Lnode a;或者Lnode *a。a.next或者a.data来操作结点的两个域
- *LinkList,指向(结点)结构体类型的指针,比Lnode更简便的一种定义,可以LinkList a,代表a指针指向一个结点。
首元结点:链表中存储第一个数据元素a1的结点
头结点:为了操作方便,在首元结点之前加了个该结点
头指针指向头结点,头结点为空,证明链表是空表
好处
- 使首元结点和其后的所有结点处理一致
- 使空表和非空表处理统一处理
数据域可存链表长(头结点不算进表长)
操作
操作单链表最常用两语句:p=L;(从头结点开始)p=L->next(从首元结点开始)
定义链表,用LinkList 头指针名;而定义结点指针p,通常用LNode *p;
- 因为头指针名通常被认为是链表名,也因为他是头指针,指针。
- 这样更直观,理解起来方便。
- 如果有多个数据域(结构体数据成员很多),则直接单独开一个结构体把数据域作为这个结构体的成员,把该结构体typedef成ElemType,然后结点结构体里就可以写ElemtType data;了,这样可以统一链表的操作
初始化表
-
关键算法
- L=new Lnode;
- L->next=NULL;
-
参数表
- &L