1、基础概念:
线性表:
- 是一种线性结构,由n个数据元素组成的有穷序列,数据元素又称结点;
特征:
- 结点具有一对一的关系;
- 如果节点数不为零,每个结点有且仅有一个直接前驱–(起始结点没有直接前驱除外);
- 节点数不为零,每个结点有且仅有一个直接后继–(终端节点没有直接后继除外);
2、基本运算实现:
- 初始化Initiate(L):建立一个空表L=();L中不含数据元素;
- 插入Insert(L,x,i):在线性表L的第i个数据元素之后插入一个值为x的新数据元素,插入后表长度+1,该插入元素之后的元素的下标+1,其中(1≤i≤n+1);
- 删除Delete(L,i):删除线性表L中的第i个数据元素ai,其中i(1≤i≤n),删除后表长度-1;删除该元素时,该元素之后的元素的下标-1;
- 求表长Length(L):返回线性表的长度;
- 读表元素Get(L,i):返回线性表的第i个元素,当i不满足1≤i≤Length(L)时,返回特殊值;
- 定位Locate(L,X):查找线性表中数据元素值等于x的结点序列,若有多个数据元素值与x相等,运算结果为这些结点中序号的最小值,若找不到该结点,则运算结果为0;
其中初始化,插入,删除和查找四种为常用基本运算;
3、链表图示:
- 头结点:
- 设置头结点好处:
对链表操作时,可以对空表,非空表的情况以及对首元结点进行统一处理,变成更方便
4、顺序实现与链式实现比较
比较 | 顺序实现 | 链式实现 |
---|---|---|
查找 | 随机存取,时间复杂度O(I) | 对元素扫描,时间复杂度O(n) |
定位 | 时间复杂度为O(n) | 时间复杂度为O(n) |
插入、删除 | 元素比较,结点移动时间,时间复杂度为O(n) | 元素比较,结点不移动,时间复杂度为O(n) |
整体 | 预分配存储空间 | 不需预分配存储空间 |