总论
线性表(List):零个或多个数据元素的有限序列。
有限:元素个数是有限的。(计算机处理的对象都是有限的)
序列:元素之间是有顺序的,若元素存在多个,则第一个元素无前驱,最后一个元素无后继,其他每个元素都有且仅有一个前驱和后继。
一、存储结构
存储结构 | 表 | 读取 | 更新 | 插入 | 删除 |
---|---|---|---|---|---|
顺序存储 | 1 | 1 | n | n | |
链式存储 | 单链表 | n | 1 | 1 | 1 |
单链表插入和删除,其实是由两部分组成:第一部分就是遍历查找第i个结点;第二部分就是插入和删除结点。
从整个算法来说,我们很容易推导出:链表的时间复杂度都是O(n)。如果在我们不知道第i个结点的指针位置,单链表数据结构在插入和删除操作上,与线性表的顺序存储结构是没有太大优势的。但如果,我们希望从第i个位置,插入10个结点,对于顺序存储结构意味着,每一次插入都需要移动n-i个结点,每次都是O(n)。而单链表,我们只需要在第一次时,找到第i个位置的指针,此时为O(n),接下来只是简单地通过赋值移动指针而已,时间复杂度都是O(1)。显然,对于插入或删除数据越频繁的操作,单链表的效率优势就越是明显。