购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

第1章

链表

链表作为最基本的数据结构,不仅在实际应用中有着非常重要的作用,而且也是程序员面试笔试中必考的内容。具体而言,它的存储特点是:可以用任意一组存储单元来存储单链表中的数据元素(存储单元可以是不连续的),而且,除了存储每个数据元素a i 外,还必须存储指示其直接后继元素的信息。这两部分信息组成的数据元素a i 的存储映像称为结点。N个结点链在一起被称为链表,结点只包含其后继结点的信息的链表被称为单链表,而链表的第一个结点通常被称为头结点。

对于单链表,又可以将其分为有头结点的单链表和无头结点的单链表,如下图所示。

在单链表的开始结点之前附设一个类型相同的结点,称之为头结点,头结点的数据域可以不存储任何信息(也可以存放如线性表的长度等附加信息),头结点的指针域存储指向开始结点的指针(即第一个元素结点的存储位置)。 需要注意的是,在Java中没有指针的概念,而类似指针的功能都是通过引用来实现的,为了便于理解,我们仍然使用指针(可以认为引用与指针是类似的)来进行描述,而在实现的代码中,都是通过引用来建立结点之间的关系。

具体而言,头结点的作用主要有以下两点:

(1)对于带头结点的链表,当在链表的任何结点之前插入新结点或删除链表中任何结点时,所要做的都是修改前一个结点的指针域,因为任何结点都有前驱结点。若链表没有头结点,则首元素结点没有前驱结点,在其前面插入结点或删除该结点时操作会复杂些,需要进行特殊的处理。

(2)对于带头结点的链表,链表的头指针是指向头结点的非空指针,因此,对空链表与非空链表的处理是一样的。

由于头结点有诸多的优点,因此,本章中所介绍的算法都使用了带头结点的单链表。

如下是一个单链表数据结构的定义示例: 6DgGko9UF5SBpXXa0WZvspuMvOGyRvF4/b9pUi4/H6zwHa8tcDhgHC3ZFQm5idZp

点击中间区域
呼出菜单
上一章
目录
下一章
×