提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一、数组
数组是多个相同数据类型的数据按照一定顺序排列的组合, 并使用一个名字命名, 并通过编号的方式对这些数据进行统一管理。
数组中的元素在内存中都是相连的, 而且数组的内存空间是固定的, 所以数组的长度一旦确定就不能修改。
这引发的问题是: 每当我们需要给数组增加长度添加新元素时, 只能让系统重新分配内存空间。 于是我们需要在一开始就设置足够的数组长度, 但是这可能导致数组空间浪费, 或者长度仍然不够的问题。
但是链表可以解决这一点。
并且, 当我们尝试在数组中间插入元素的时候, 必须将后面的元素都向后移。如果没有足够的空间,还得将整个数组复制到其他地方, 重新分配内存空间。
二、链表
链表中的元素是随机分布的, 或者说链表中的元素可以存储在内存的任何地方, 所以插入元素很方便, 只需修改 它前面的那个元素指向的地址。
链表的每个元素都存储了下一个元素的地址,从而使一系列随机的内存地址串在一起。
但是当我们需要随机读取元素时, 比如要寻找数组或者链表的第五个元素, 由于我们可以依赖数组的下标[索引],可以迅速找到数组的任何元素。
但是,我们不知道链表元素的地址,所以我们只能先访问第一个元素以获取第二个元素的地址,再访问第二个元素以获取第三个元素 的地址,以此类推,直到访问第五个元素。
所以当需要随机读取元素时,使用链表就变得十分麻烦。
三、对比
数组 | 链表 | |
---|---|---|
读取 | O(1) | O(n) |
插入 | O(n) | O(1) |
删除 | O(n) | O(1) |
对于频繁插入元素或者删除元素的操作, 使用链表更快。
如果需要频繁读取元素, 使用数组更快。
总结
顺序访问 --> 链表
随机访问 --> 数组