数组
数组是一块连续的内存空间,并且是在编译阶段就要确定空间大小的,同时在运行阶段是不允许改变的,所以它不能够随着需要的改变而增加或减少空间大小,所以当数据量大的时候,有可能超出了已申请好的数组上限,产生数据越界,或者是数据量很小,对于没有使用的数组空间,造成内存浪费。
链表
链表则是动态的内存空间,并不像数组一样需要事先申请好大小,链表是现用现申请就OK,根据需求动态的申请或删除内存空间,对于的是增加或删除数据,所以比数组要灵活。
数组和链表的区别
数组 | 链表 |
---|---|
数组是一个相似数据类型的数据集合 | 链表是一个有相同数据类型的有续集,其中每个元素使用指针链接 |
数组元素可以使用数组索引随机访问 | 链表不允许随机访问,元素只能被有序或顺序访问 |
数组的数据元素在内存中连续储存 | 元素可能存储在内存的任意地方,链表创建一个指针指向相应的数据 |
插入和删除操作非常耗时,时间为O(n),因为元素的内存地址是连续和固定的 | 链表的插入和删除操作非常快,时间为O(1) |
数组的内存是静态分配的,在编译期间完成 | 链表的内存分配是动态的,在运行时动态分配 |
数组的大小必须在数组的声明或初始化的时候指定 | 链表的大小随着元素的插入或删除变化 |