链表和数组的区别
1、 数组是将元素在内存中连续存放。<br> 链表中的元素在内存中不是顺序存储的,而是通过存在元素中的指针联系到一起。<br>
2、 数组必须事先定义固定的长度,不能适应数据动态的增减的情况。当数据增加时,可能超出原先定义的元素个数;当数据减少时,造成内存浪费;<br> 链表动态地进行存储分配,可以适应数据动态地增减的情况。<br>
3、(静态)数组从栈中分配空间,对于程序员方便快速,但是自由度小; <br> 链表从堆中分配空间,自由度大但是申请管理比较麻烦。
优点:
数组
随机访问性强,查找速度快,时间复杂度是0(1)
链表
任意位置插入元素和删除元素的速度快,时间复杂度是o(1)
内存利用率高,不会浪费内存
链表的空间大小不固定,可以动态拓展。
缺点:
数组
从头部删除、从头部插入的效率低,时间复杂度是o(n),因为需要相应的向前搬移和向后搬移。
内存利用率低,浪费内存
空间固定,不可以动态拓展
内存空间要求高,要求有足够连续的内存空间