美文网首页
链表 - 单向链表、双向链表 - LinkedList

链表 - 单向链表、双向链表 - LinkedList

作者: 小名坎坎 | 来源:发表于2019-04-11 17:53 被阅读0次

    什么是链表?

    定义:链表是一种物理存储单元上非连续、非顺序的存储结构,元素的逻辑顺序是通过链表中的指针链接次序实现的

    以上定义拆分来看

        1.数据元素在内存上是离散的

        2.数据元素的内存在逻辑上是关联的,通过指针

    .如上图 每一个element的内存都是离散的,但是他们之间能通过指针p连接起来。

    单向链表

    单向链表顾名思义肯定是顺着一个方向,上图为单向链表的结构图,一个结点有两部分组成,data和next,data存储的是数据元素,next存储的是下个结点的地址。

    还有一点需要注意,单项链表还有个head指针,其实也可理解为就是申明链表时的变量,其存储的值就是单向链表头结点的地址。这应该很好理解,我们只需要只要头结点地址,其他任何位置的元素我们都能找到。

    相信说到这里,我们都能对单向链表是什么有个概念。接下来我们手写一个简单的单向链表

    结点结构

    上面这段代码就是一个结点的结构,data可以存储类型,next指向下一个节点,关于其增删改查在这里我就用一段逻辑体现一下大概添加的步骤。

    逻辑伪代码如下

    这里就简单介绍了增加一个元素的简单逻辑,关于单链表的至于具体的实现就不贴出来了,主要因为截图截不全还麻烦...

    双向链表

    下面我们介绍一下双向链表

    从上面的单向链表中我们可以推测出双向链表的结构,就是多了一个方向而已

    一个结点结构分为三部分,上一个结点地址、数据元素、下一个结点地址。代码表示大概如下

    下面只要把结点连接起来  就是一个双向链表结构了。关于双向链表的知识,还是一起看一下LinkedList的源码

    LinkedList源码

    结点结构

    添加元素的方法我们主要看三种,表头添加,中间插入,表尾添加

    表头插入 表尾插入

    这两个我就不介绍了,我们着重介绍一下中间插入

    这是一个插入流程,主要看linkBefore(),我们要根据一个index插入元素,肯定是插入在原本这个位置的元素之前。

    逻辑图

    原则:我们插入的时候要遵循着 先连后断,我们可以看到在linkBefore()方法中初始化newNode的时候连接就已经完成了,后面的逻辑就是3,4两步断开过程。

    在增删改查的过程中 如果看懂了增加的方法,其他的都相对较简单,就不再一一介绍了

    相关文章

      网友评论

          本文标题:链表 - 单向链表、双向链表 - LinkedList

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