数组和链表代表的是两种存储结构,数组代表的是顺序存储,链表代表的是链式存储
数组为什么可以通过索引进行随机访问?
任何元素都有一个内存地址,只要知道了内存地址(指针)就可以立即访问该内存地址所指向的元素
链表:
链表不是紧凑(连续)存储的,没有办法通过索引立即访问
new 出来的链表节点是分散在内存中的各个地方的(不需要一块连续的内存空间)
因为不是连续存储的所以推导不出来下一个元素的地址,故通过一个next指针记录下一个元素的地址(通过读取next指针的值就可以知道下一个元素的地址)
数组和链表这两个数据结构是互补的
数组是可以进行随机访问,访问效率高,具有连续存储的特性,需要维护这个特性。例如,删除中间的元素需要将这个元素后面的元素都向前挪一位,效率低。连续存储给带来随机访问的遍历行,但是维护连续存储的这个特性需要付出代价
链表不是连续存储的,没有办法通过索引随机访问元素,但是插入和删除效率高,不用维护连续存储的特性,但是next指针需要消耗一定的存储空间
数组装满了怎么办?例如,申请了 new int[6],装满之后只能再新申请一个空间更大的,将之前的6个元素copy到新数组中然后再添加新的元素
数据结构本质上做的事情就是:增删改查