用数组模拟链表比指针实现的链表有何优势

在竞赛里,如果数据范围不大,那么用数组模拟的链表中的「指针」可以用 2 字节甚至 1 字节来实现,与真正的指针(通常为 4 字节)相比至少省一半内存。
【用数组模拟链表比指针实现的链表有何优势】 当然,这个好处一般也只有在竞赛的时候有用。

■网友
数组链表相当于自己实现一个简易的 memory allocator,没太大差别
■网友
相当于做了内存池
■网友
cache比较友好
■网友
可以避免为每个节点单独分配堆内存,which is a time-consuming operation. 另外数据储存位置比较集中,有利于避免cache miss. 运行速度快一些。缺点也很明显,可读性、扩展性很差。

■网友
如果题主指的是,使用bitmap或单链表实现一个allocator管理数组索引,可以在常数时间分配或回收(反之,调用malloc或free需要进入内核态),以及方便的引入一级缓存(用于缓存已释放的但是以后还可能用到的节点)。如果节点的size是固定的,这样做也可以减少内存碎片。
■网友
可以实现一个where函数,已知元素的指针求其在链表数组中的位置。不过没什么用,就是在range for中获取索引而已。
■网友
真正的鏈表在內存中是不連續的,對 CPU 的緩存不友好,沒辦法有效地預讀。lz 可以用 C++ 把兩種鏈表都寫一下,測一測時間,同樣的長度,歷遍的時間應該相差數倍。
■网友
操作系统帮你管理数组下标和你自己管理的区别
■网友
有的编程语言不支持指针和引用。另外可能销毁链表变得更容易了?因为数据实际上都在一块内存里。


    推荐阅读