一、空间
1) 创建
① 顺序表:静态创建一块连续的空间。
② 链表:动态的创建不连续的空间。
2)使用
① 顺序表:
优点:
按逻辑顺序连续存储,提高空间利用率;
大多数高级语言都有数组,容易实现;
不需要存储关系,无需额外空间开销。
缺点:
空间长度固定,需要预先分配足够大的存储空间,估计过大,可能会导致顺序表后部大量闲置;
预先分配过小,又会造成溢出。
② 链表:
优点:基本没有空间上的限制,允许线性表的长度有很大的变化,,基本只与内存空间大小有关。
缺点: 需要存储关系,浪费一些空间。
二、时间
1) 查找
① 顺序表:按元素序号查找,时间复杂度小。
② 链表:需要循环链表访问,即从一个节点一个一个节点去查找元素访问,时间复杂度大。
2)添加、删除
① 顺序表:需要进行较多数据元素的移动,并且改变物理位置,时间复杂度大。
② 链表:物理位置不变,只进行少量的指针指向的变动,时间复杂度小。
三、选择
1)从存储空间上:
如果需要分配明确的空间大小,尽量选择顺序表;
如果对线性表的长度与规模难以估计,最好选择链表。
2)从操作上:
对于经常做查找访问元素的操作,用顺序表较好;
对于经常做添加、删除元素的操作,用链表较好。
3)基于环境的考虑:
顺序表容易实现,任何高级语言中都有数组类型;链表的操作是基于指针的,相对来讲前者简单些。