为了账号安全,请及时绑定邮箱和手机立即绑定

【金秋打卡】第5天 JavaScript版数据结构与算法- 数据结构之“链表”

课程名称: JavaScript版数据结构与算法
课程章节:第5章 数据结构之“链表”
课程讲师: lewis
课程内容:

课程介绍
第5章 数据结构之“链表”
5-1 链表简介(08:42)
5-2 LeetCode:237.删除链表中的节点(04:48)
5-3 LeetCode:206.反转链表(08:52)
5-4 LeetCode:2. 两数相加(12:39)
5-5 LeetCode:83. 删除排序链表中的重复元素(07:08)
5-6 LeetCode:141. 环形链表(09:05
5-7 前端与链表:JS 中的原型链(22:02)
5-8 前端与链表:使用链表指针获取 JSON 的节点值
5-9 链表-章节总结


一、什么是链表

链表
作为一名JAVA开始编程的产品,对链表还好有清晰的认识:
数组是连续存储在内存中的数据结构,因此它的优势是可以通过下标迅速的找到元素的位置,而它的缺点则是在插入和删除元素时会导致大量元素的被迫移动,为了解决和平衡此问题于是就有了链表这种数据类型。
链表是数据结构之一,其中的数据呈线性排列。在链表中,数据的添加和删除都较为方便,就是访问比较耗费时间。
链表由一个个数据节点组成的,它是一个递归结构,要么它是空的,要么它存在一个指向另外一个数据节点的引用。

单纯看定义会觉得云里雾里不知所以,所以这里我们借用下面的一张图片直观的感受一下什么是链表。如下示范:
图片描述

JS中不存在链表的数据结构,可以使用OBJECT进行模拟
图片描述


二、链表的类型

2.1 分类

链表通常会分为以下三类:

  • 单向链表

  • 双向链表

  • 循环链表

  • 单循链表

  • 双循环链表

1.单向链表

链表中最简单的一种是单向链表,或叫单链表,它包含两个域,一个数据域和一个指针域,指针域用于指向下一个节点,而最后一个节点则指向一个空值,如下图所示:

单链表的遍历方向单一,只能从链头一直遍历到链尾。它的缺点是当要查询某一个节点的前一个节点时,只能再次从头进行遍历查询,因此效率比较低,而双向链表的出现恰好解决了这个问题。

接下来,我们用代码来实现一下单向链表的节点:

private static class Node<E> {
    E item;
    Node<E> next;

    Node(E element, Node<E> next) {
        this.item = element;
        this.next = next;
    }
}

2.双向链表

双向链表也叫双面链表,它的每个节点由三部分组成:prev 指针指向前置节点,此节点的数据和 next 指针指向后置节点,如下图所示:

接下来,我们用代码来实现一下双向链表的节点:

private static class Node<E> {
    E item;
    Node<E> next;
    Node<E> prev;

    Node(Node<E> prev, E element, Node<E> next) {
        this.item = element;
        this.next = next;
        this.prev = prev;
    }
}

3.循环链表

循环链表又分为单循环链表和双循环链表,也就是将单向链表或双向链表的首尾节点进行连接,这样就实现了单循环链表或双循环链表了,如下图所示:


三、链表的应用

1.在操作系统中,链表用来分配内存,链接了一串空闲内存。分配容易,释放容易。
图片描述

2.数据库中,比如说字典,就是用链表来解决冲突的,你可以看一下redis数据库。
图片描述
3.还有双向链表,
4.跳跃链表,寻找可以达到二叉树的速度。
5.压缩链表,节省计算机空间。
6.set集合就是用链表实现的。


四、总结

了解了课程中的内容,开始在leecode中去刷题吧,将算法彻底融入自己的实践之中。
图片描述
课程截图:
图片描述

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消