空间上:
链表多一些,不仅记录元素的值,还要记录后继的地址( n*地址的长度)
数组有多少元素,本身就是元素占据的空间
时间上:
按索引的(按索引访问):array快
元素个数变化(增删) :link有优势
按照内容:两个一样
数组: | 时间复杂度 | |
插入(空间充足) | O(1) | |
插入(空间不足) | O(n)+O(1)=O(n) | 扩容和拷贝 |
删除(根据内容) | O(n-k)+O(n) | 顺序查找 |
删除(根据索引) | O(n-k) | 索引是k,挪(k-1)个 |
删除(末尾元素) | O(1) | |
删除(非末尾元素) | O(1)+O(n)=O(n) | 数组要往前挤 |
查询(根据内容) | O(n) | 跟链表一样了就 |
查询(根据索引) | O(1) | 根据头节点算出第k个 |
修改(根据内容) | O(n) | 顺序查找 |
修改(根据索引) | O(1) | 有索引直接定位 |
链表 | 时间复杂度 | |
插入 | O(1) | 改指针即可 |
删除(索引) | O(n) | 找不到索引,要数 |
删除(内容) | O(n) | 改指针+查找(费劲) |
查询(根据内容) | O(n) | 顺序查找 |
查询(根据索引) | O(n) | 要从头开始数 看k是几 |
修改(根据内容) | O(1) | 顺序查 |
修改(根据索引) | O(n) | 要从头开始数 看k是几 |