逻辑结构上:都是线性结构,线性表
存储结构上:
优点 | 缺点 | |
顺序表 | 支持随机存取、 存储密度高 | 大片连续空间分配不方便 改变容量不方便 |
链表 | 离散的小空间分配方便 改变容量方便 | 不可随机存取 存储密度低 |
基本操作:
1.创建
顺序表:需要预分配大片连续空间
(分配空间小,则之后不方便扩展容量,分配空间大,则浪费内存空间)
链表:只需分配一个头节点(甚至只声明头指针)
2.销毁
顺序表:
静态分配:静态数组(系统自动回收空间)
动态分配:动态数组(手动free)
(malloc和free必须成对出现)
链表:循环依次删除结点(free)
3.插入和删除
顺序表:
插入删除都要将后续元素后移/前移
时间复杂度O(n),时间开销主要来自于移动元素
(若数据元素很大,则移动的时间代价很高)
链表:
插入删除元素只需修改指针即可
时间复杂度O(n),时间开销主要来自于查找元素
(查找元素时间代价一般更小)
4.查找
顺序表: 按位查找 O(1)
链表: 按位查找 O(n)
顺序表: 按值查找 无序O(n) 有序 折半查找O(log n)
链表: 按值查找 O(n)
5.应用场景:
表长难以预估、经常要增加、删除元素 ——链表
表长可预估、查询操作比较多 ——顺序表 eg:课堂点名