美文网首页《理论篇》
《链表与数组》

《链表与数组》

作者: 不够果断是种癌 | 来源:发表于2019-06-25 11:05 被阅读0次

说明:本笔记仅供自我学习。参考极客时间王争的《数据结构与算法之美》专栏。首先我们得知道是什么数组?

数组是一种线性表的数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。

数组支持随机访问,根据下标随机访问的时间复杂度为O(1)。如果是查找的话就算排好序的数组

,你用二分查找的话,时间复杂度应该为O(logn)。并且如果是删除和插入元素的话,其最坏复杂度为O(n)。

链表恰恰相反,它并不需要一块连续的内存空间,它通过“指针”将一组零散的内存块串联起来使用。

其中,我们把内存块称为链表的“结点”。为了将所有的结点串起来,每个链表的结点除了储存数据之外还要记录下一个节点的地址,我们把记录下一个节点的地址的指针叫做后继指针。我们把第一个节点叫做头节点,最后一个节点叫做尾节点。头节点用来记录链表的基地址。尾节点储存的就是空地址 NULL。链表的话由于其是不连续的空间所以针对插入和删除是非常快速的。其复杂度是O(1)。如果是想访问的由于其内存空间不是连续的,需要遍历才行。其复杂度为O(n)。

链表分为单链表和双链表以及循环链表,接下来我们看看循环列表。循环列表是一种特殊的单链表其尾节点指向的不是空地址而是头节点。

再接下来我们看看双向链表,单向链表只有一个方向,结点只有一个后继指针 next 指向后面的结点。而双向链表,顾名思义,它支持两个方向,每个结点不止有一个后继指针 next 指向后面的结点,还有一个前驱指prev 指向前面的结点。

最后来一个数组和链表的性能大比拼。

数组对于插入和删除是非常低效的其复杂度是O(n),对于随机访问是很高效的其复杂度为O(1)。

而链表恰恰相反,它对于数据的插入和删除其复杂度是O(1),对于随机访问其复杂度是O(n)。

相关文章

  • 数据结构-链表

    章节 动态数组 & 栈 & 队列 与 链表的不同 链表特性 & 图示 链表实现 & 各操作时间复杂度分析 动态数组...

  • python笔试面试项目实战2020百练2选择排序冒泡排序

    链表与数组 链表的优势在插入元素方面,需要随机地读取元素时,数组的效率很高,因为可迅速找到数组的任何元素。在链表中...

  • 数据结构和算法

    1、数组和链表区别(1)物理存储结构不同。链表与数组在计算中存储元素采用不同的存储结构,数组是顺序存储结构,链表是...

  • 数据结构与算法之美 —— 如何实现LRU缓存淘汰算法?(总结)

    链表与数组 链表定义: 百度百科 数组定义:百度百科 总结:链表和数组最大差别是在内存空间结构上,连续(数组)和...

  • 链表

    链表 缺点:查找复杂有点:定点删除/插入元素 单链表 双向链表 循环链表 双向循环链表 数组与链表的区别 数据存储...

  • 算法与数据结构(四)栈与队列

    上次聊到数组与链表,它们都是线性表,数组与链表的本质区别是内存是否连续,进而得出结论:数组可以在 O(1) 时间复...

  • 大数据(架构师)面试系列(5)

    1.数组与链表的区别是什么? 线性表--数组和链表的区别链表和数组的区别在哪里? 2.Scala函数式编程的特点?...

  • Java集合源码分析之Map(一):超级接口Map

    数组与链表在处理数据时各有优缺点,数组查询速度很快而插入很慢,链表在插入时表现优秀但查询无力。哈希表则整合了数组与...

  • 三、数据结构与算法 — 链表

    链表与数组的区别 链表不是连续的 单链表与循环链表 注意链表中的头结点和尾结点。 循环链表从尾可以方便的到头,适合...

  • 静态链表及C#实现

    静态链表 静态链表是用数组模拟动态链表。 静态链表结构描述 首先,静态链表使用数组来模拟动态链表。数组存放一个节点...

网友评论

    本文标题:《链表与数组》

    本文链接:https://www.haomeiwen.com/subject/obzzqctx.html