简述数组和链表的区别及双方的优缺点。

表位于持久内存中,因此搜索很快,但添加和删除很慢,而且空间是固定的。
链表不平衡,增删快,位置灵活,查找慢。
我还在验证中,我的经验是数组多用于静态数据,而链表适合动态调整。
你自己掂量一下吧。

链表和数组的区别是什么?

嘿,这就是你所说的。
我在学习编程的时候,也遇到过这些头痛的问题。
2 01 4 年刚入行的时候,写了一个管理系统,用数组来存储用户信息。
当时服务器内存只有几GB,用户也不多,所以静态分配不是问题。
随后,一个项目诞生了,该项目的用户数据量非常巨大,动不动就有成百上千条数据。
阵列方面,内存不足的时候就崩溃了,需要手动扩容,这是很有问题的。
接下来,我尝试修改链表并动态分配内存。
虽然内存碎片有点烦人,但是它更加灵活,让用户添加和删除也方便很多。

2 连续的和不连续的,这都有很大的影响。
2 01 5 年我在深圳做的一个电商项目中,产品信息是用数组存储的。
每次查询都非常快,因为内存是连着的,一访问CPU就会冻结。
但如果换个场景,比如用数组来存储用户的在线状态,变化频繁,必须逐一修改内存中的连续块,效率就会很低。
接下来,我移动到链接列表。
虽然每次找到用户都要从头到尾走一遍,但是当我想改变状态的时候,只要找到节点然后改变就可以了,速度非常快。

3 栈区和堆区这两个术语有点片面。
2 01 9 年我在北京做的一个游戏项目中,游戏的角色信息使用了链表。
堆中的节点没有问题,但是链表头指针在堆栈上,并且指向堆中的数据。
如果搞不清楚这一点,内存泄漏就不会被错过,而且很容易出现段错误。
所以,不要死记硬背堆栈,要看具体情况。

4 从复杂程度来说,过去2 0年我一直在杭州搭建外卖系统。
订单存储在数组中。
当订单量不大时,插入和删除都非常快。
随后,订单量增大,阵列崩溃,每个条目后面都必须移动大量数据。
接下来我转向链接列表。
虽然搜索订单有点慢,但下单和删除却很快,用户体验也好很多。
但是,如果你的外卖系统中的订单数据量不大,使用数组可能会更快,因为链表仍然需要维护指针,这会产生开销。

总之,没有最好的数据结构,只有最适合的。
你得看你那个场景到底要啥。
我这十年遇到的坑就是,有时候太死板,非得用某种数据结构,结果就是崩溃。
后来我就比较灵活了,根据实际情况来选择。