7. ALists, Resizing, vs. SLists
约 319 字大约 1 分钟
2025-04-30
上节课我们介绍了 DLList 和 Array,接下来这节课我们将想办法优化 Array。
假如我们现在要获取数组或者链表中间位置的一个元素,哪个数据结构会更快?答案是数组,因为数组的 get
方法时间复杂度为 O(1)
,而链表需要遍历,为 O(N)
。
相反,如果我们往满的一个数组里添加一个新元素,我们可能就需要创立一个新的更大的数组,再把原数组的内容拷贝过去,再添加一个新元素;链表就很简单,创建一个节点,原链表的尾指针指向它就结束了。
因此我们需要优化添加元素的方法。原来是添加一个元素,size 加一,我们也可以添加一个元素 size 加 100,这样后面的添加操作就不需要 resize 了。
还有就是,有可能 size 为 100000,但是实际只用了 10 个元素,太浪费空间了。解决办法是设置一个变量 R
,表示使用空间和总空间的比例。当比例小于某个值的时候,进行一次 resize,减少空间的占用。