您的位置:首页 > 汽车 > 时评 > 数据结构---链表

数据结构---链表

2024/9/8 12:31:40 来源:https://blog.csdn.net/weixin_47808575/article/details/140610949  浏览:    关键词:数据结构---链表

单向链表

1、数组是访问元素比较方便,这一节的链表 则是插入与删除更方便。

2、数组的元素地址是强制连续的,但是链表的元素内存地址可以是不连续的 ,它通过地址引用的方式指向下一个元素的位置,所以链表的数据结构看起来比较像一个串。

单向列表的特点

1、在Node元素中,除了本身的数据item之外,往往还会持有一个next对象,它用来指向下一个节点的引用。

2、链表的数据结构也注定了它无法快速的访问某个元素,只能依靠遍历的方式慢慢查找,所以说链表的查询数据是比较慢的,是O(N) 这个级别,但是它在头节点(第一个节点)进行插入和删除比较快,只需要O(1) 就可以了,因为你只需要改变一下第一个元素的引用。

3、我为什么要特意提到头节点呢, 因为如果你想要在尾节点进行插入和删除,势必需要遍历这个链表,找到最后这个链表节点再进行插入,遍历链表的花费是O(N)。

代码简单实现

       class LINK {constructor(value) {this.value = value;this.next = null;}}const a1 = new LINK('第一');const a2 = new LINK('第二');const a3 = new LINK('第三');const a4 = new LINK('第四');a1.next = a2;a2.next = a3;a3.next = a4;

单项循环列表

单项循环列表是一种数据结构,它是由一组节点组成的,每个节点包含一个数据元素和一个指向下一个节点的指针。与普通的单向链表不同的是,最后一个节点的指针指向第一个节点,形成一个环。

代码简单实现

       class LINK {constructor(value) {this.value = value;this.next = null;}}const a1 = new LINK('第一');const a2 = new LINK('第二');const a3 = new LINK('第三');const a4 = new LINK('第四');a1.next = a2;a2.next = a3;a3.next = a4;a4.next = a1; // 重点是尾部的next指向头部

双向链表

双向链表在每个节点处都维护了两个指针,一个指向前一个节点(称为前驱节点),另一个指向下一个节点(称为后继节点)。这种设计使得在链表中的任何一个位置,都可以快速地向前或向后遍历

双向链表简单代码实现

       class LINK {constructor(value) {this.value = value;this.next = null;this.pre = null;}}const a1 = new LINK('第一');const a2 = new LINK('第二');const a3 = new LINK('第三');const a4 = new LINK('第四');a1.next = a2;a2.next = a3;a2.pre = a1;a3.next = a4;a3.pre = a2;a4.pre = a3;

双向循环链表

双向循环链表是一种链表数据结构,其中每个节点包含指向前一个节点和下一个节点的指针。与普通双向链表不同,双向循环链表的最后一个节点的后继指针指向头节点,第一个节点的前驱指针指向尾节点,形成一个环

简单代码实现

      class LINK {constructor(value) {this.value = value;this.next = null;this.pre = null;}}const a1 = new LINK('第一');const a2 = new LINK('第二');const a3 = new LINK('第三');const a4 = new LINK('第四');a1.next = a2;a1.pre = a4; // 重点是头部的pre指向a2.next = a3;a2.pre = a1;a3.next = a4;a3.pre = a2;a4.next = a1; // 重点是尾部的next指向a4.pre = a3;

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com