链表VS数组

Posted jetqiu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链表VS数组相关的知识,希望对你有一定的参考价值。

1、链表是通过“指针”将一组零散的内存块串联起来的数据结构
2、链表可以分为单链表、双向链表和单/双向循环链表
2.1、删除链表中等于某个值的节点,单链表和双向链表的时间复杂度一样
2.2、由于双向列表可以直接找到前驱结点,所以删除指定的节点,双向链表比单向链表高;同时在链表的某个指定结点前面添加一个结点,双向链表比单链表也有很大的优势
2.3、对于一个有序链表,双向链表可以与当前节点的前后节点比较,然后决定往前还是往后进一步折半查找,这种情况下查询的效率也要比单链表高一些
2.4、因为双向链表中的结点已经保存了前驱结点的指针,所以内存消耗会比单向链表多,但是这都是以空间换时间的设计思想
3、 LinkedHashMap就是用双向链表这种数据结构实现的
4、链表 VS 数组
4.1、数组的缺点是大小固定,一经声明就要占用整块连续内存空间。所以申请一个 100MB 大小的数组,当内存中没有连续的、足够大的存储空间时会申请失败,报内存不足,即便内存的剩余总可用空间大于 100MB;但是如果我们申请的是 100MB 大小的链表就不会有问题
4.2、数组实现上使用连续的内存空间可以借助 CPU 的缓存机制,预读数组中的数据,所以访问效率更高。而链表在内存中并不是连续存储,所以办法有效预读
4.3、如果对内存的使用非常苛刻,那数组就比较合适。因为链表中的每个结点都需要消耗额外的存储空间去存储一份指向下一个结点的指针,所以内存消耗会翻倍。而且,对链表进行频繁的添加、删除操作,还会导致频繁的内存申请和释放,容易造成内存碎片,在Java中可能会导致频繁的 GC

以上是关于链表VS数组的主要内容,如果未能解决你的问题,请参考以下文章

5定义一个JS函数,反转单向链表

05=链表的原理与实现

05=链表的原理与实现

单向链表程序

二叉树 vs. 链表 vs. 哈希表

在VS2019中编写C语言的链表程序出现了C4473等错误,怎么修改?