前言
线性表是最基本、最简单、也是最常用的一种数据结构。线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列。
线性表中数据元素之间的关系是一对一的关系。顺序表与链表是非常基本的数据结构,它们可以被统称为线性表。
顺序表
具体参考以前的一篇:顺序表
链表
参考以前的一篇博客:
链表
区别
顺序表
顺序表一般表现为数组,使用一组地址连续的存储单元依次存储数据元素。
优点
1.存储密度大,空间利用率高。(局部性原理,连续存放,命中率高)
2.存储速度快,直接利用下标存取(复杂度为O(1))。
缺点
1.长度固定,必须在分配内存之前确定顺序表的长度,具体做法是初始情况使用一个初始容量(可以指定)的数组,当元素个数超过数组的长度时,就重新申请一个长度为原先二倍的数组,并将旧的数据复制过去,这样就可以有新的空间来存放元素了。这样,列表看起来就是可变长度的。
2.存储空间连续。
3.插入删除比较慢,必须将后面的元素移动,时间复杂度是O(n)。
4.不可以增长长度,有空间限制,当需要存取的元素个数可能多于顺序表的元素个数时,会出现"溢出"问题.当元素个数远少于预先分配的空间时,空间浪费巨大。
链表
以单链表为例,链表类似于c++容器中的vector,动态数组。
优点
1.长度不固定,随意删减,复杂度为O(1)
2.单链表一次只开辟一个结点的空间,用来存储当前要保存的数据及指向下一个结点或NULL的指针,所以单链表的空间大小时动态变化的
缺点
1.存储密度小,因为每个节点有指针域和数据域,需要两倍的空间。
2.访问某个特定元素,必须遍历一遍,复杂度为O(n),查找速度慢。