链式存储结构
- 链式存储结构中的每个存储单元称为“结点”,结点包含一个数据域和一个指针域;
- 数据域存放数据元素信息;指针域存放后继结点地址;
- 数据元素之间的逻辑关系通过结点中的指针表示;
- 通常由第一个结点开始,逐一访问所有结点。
- 具有n个数据元素的线性表对应的n个结点通过链接方式链接成一个链表,即为线性表的链式存储结构。
单链表
链表中每个链结点中仅包含一个指针域,这样的链表成为单链表。
单链表的结点结构:
单链表结构:
带头结点的单链表
在链表的第一个结点之前附设一个结点,称为头结点。
带头结点的单链表:头结点的引入使得单链表的头指针永远不为空,从而给插入、删除等操作带来了方便。
结点的数据类型
typedef int ElemType;//ElemType数据元素的数据类型
typedef struct LNode//LNode为结点类型名
{
ElemTpye data;//data代表数据元素
struct LNode *next;//next为指向下一结点的指针
}LinkNode;//单链表结点类型
单链表的基本操作
//p、q为指向任意结点的指针
-
空表:head -> next == NULL
-
表尾:p -> next == NULL
-
指针后移:p = p->next
-
结点连接:p -> next = q (q结点放在p结点之后)
-
前驱:若p -> next == q,则p指向q的前驱结点
初始化单链表
void InitList(LinkNode *&L)
{
//L为指向单链表的头指针
L = new LinkNode;//分配空间,作为头结点
L -> next = NULL;
}
时间复杂度:O(1)
在函数中,需要改变单链表的头指针,因此参数L设计为一个指针的引用,即引用的类型为指针,
判断表空
bool ListEmpty