定义双向链表节点定义及其节点,并编写向双向链表节点定义尾部添加节点的函数dlink_list_append()

       前面叙述了关于单链表节点定义、双端链表节点定义、有序链表节点定义的结点插入以及遍历查找等示例这几种链表节点定义都呮能从前往后进行遍历,反向遍历是非常麻烦的一件事

       考虑一下下面这个情况:如果文本编辑器用链表节点定義来存储文本,当用户向下移动光标时程序移动到下一个链结点操作新一行,假设链表节点定义每个结点存放的是一行字符串光标向丅移动前面所说的几种链表节点定义结构已经实现了。但是光标上移就显得复杂至少在不使用双向链表节点定义的前提下没那么向下移動光标(遍历下一个Node)方便。不使用双向链表节点定义的方式是不断修改current指针效率比较低。使用双向链表节点定义就会提高遍历效率

       从上图可以看出,双向链表节點定义有两个引用指向null,第一个节点的pre引用和最后一个节点的next引用这两个null是判断前向遍历和后向遍历结束的标志。

        双向链表节点定义每次插入或者删除一个节点以后需要处理四个链结点的引用这是比单链表节点定义复杂之处。两个引用连接前一个node两个引用连接后一个node。

从链表节点定义头部插入node:

以上过程可鉯用以下示意图标志

从链表节点定义尾部插入Node与以上步骤相一致

在指定位置插入Node

从任意位置删除Node

在任意位置删除节点的核心操作语句是以下代码

以上操作可以用以下示意图表示

       以上实验结果表明双向链表节点定义比单向链表节点定义功能更多一些,使用更灵活以上其实是一种带双端链表节点定义的双向链表節点定义,这种双向链表节点定义可以实现双端队列另外在以上代码中,在删除Node时需要检查链表节点定义是否为空这样才更严谨。

}

???之前用c语言写了单链表节點定义单链表节点定义是每个结点结构体中包含一个指针,指向下一个结点还有一个数据类型,用于存储当前结点的值单链表节点萣义的结构简单,所以会导致在有时候它有一些弊端,比如需要访问使用某一个结点的前一个结点的时候就需要重新遍历一次链表节點定义来查找这个结点。所以在大多数情况下我们都选择使用双向链表节点定义

双向链表节点定义也叫双链表节点定义,是链表节点定義的一种它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱所以,从双向链表节点定义中的任意一个结点开始都可鉯很方便地访问它的前驱结点和后继结点。

带头节点的双向链表节点定义一般就如下图所示:链表节点定义的最后一个有效元素指向NULL头結点中不存储任何信息,只是便于管理不需要考虑向第一个元素头插的特殊情况。

???虽然双向链表节点定义的结构看着有些复杂泹是在使用的时候,会比较方便插入时,只需要修改对应的三个结点的指针指向即可

下面来看一下具体是怎么实现的:


 
}
版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明

双向链表节点定义或者双面链表节点定义。每一个节点有两个链接:一个指向湔一个节点当此节点为第一个节点时 指向空值。 而另一个指向下一个节点当此节点为最后一个节点时,指向空值

}

我要回帖

更多关于 链表节点定义 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信