1.逻辑结构
都属于线性表,都是线性结构
2.存储结构
顺序表:支持随机存取;各结点只存储数据本身,存储密度高;空间分配、容量改变不方便
链表:不可随机存取;要用空间存指针,存储密度低;空间分配、容量改变方便
3.基本操作
创
顺序表:需要分配大片连续空间
链表:只需分配一个头指针
销
顺序表:修改length=0,静态(系统自动回收),动态(手动free)
链表:依次删除各结点,free
增、删
顺序表:后移(前移)插入位置之后的元素,O(n)——主要来自移动元素
链表:修改指针,O(n)——主要来自查找目标元素
若数据元素很大,移动比查找代价更高
查
顺序表:按位查找O(1);按值查找O(n)或 O ( l o g 2 n ) O(log_2n) O(log2n)(数据有序,折半查找)
链表:按位查找O(n);按值查找O(n)
总结(用哪个?)
顺序表 | 链表 | |
---|---|---|
表长难以估计 | × | √ |
经常增、删 | × | √ |
经常查 | √ | × |