【数据结构的JavaScript版实现】data-struct-js的npm包初版作成

码路工人 CoderMonkey

【数据结构的JavaScript版实现】

拖了这么久,终于趁着春节假期把初版(即计划的内容)完成了。

JavaScript 实现的数据结构,js库/npm包:data-struct-js

[npm](https://www.npmjs.com/) 上搜 data-struct-js

这个 npm 包主要侧重数据结构,

构建了基本数据结构的概念,

实现了常用的几个方法,

比如图(有向图/无向图),

仅有实现广度优先遍历和深度优先遍历,

而其它的更多偏向于算法方面暂未涉及。

本包特色:

工程方面

  • ES6标准的面向对象编程

    基于ES6的类的实现,

    对于想学习JS的童鞋,

    可以看看代码中的面向对象编程
  • ES6标准的模块化开发

    基于ES6的模块化开发,

    对于想学习JS的童鞋,

    可以看看代码中的模块化开发
  • babel

    使用 babel 将 ES6 代码编译成 ES5 的JavaScript

    可以看看 babel 的简单使用
  • webpack

    当前(最)热门的打包工具

    想了解的童鞋可以看看示例部分的工程源码

    中对 webpack 的简单使用
  • 关于ES6模块化与CommonJS模块化的混用

    代码中能看到有两种模块化方式,

    关于混用,一定要搞明白为什么,

    通常来讲,是不可以混用的
  • 另外,样例工程(examples)中自定义 console 扩展可能值得一看哦

内容方面

  • 实现了以下常用的数据结构:

    • 栈 Stack
    • 队列:

      队列 Queue

      优先队列 PriorityQueue
    • 链表:

      链表 LinkedList

      双向链表 DoublyLinkedList

      循环链表 CircleLinkedList
    • 哈希表 HashTable
    • 树:

      二叉搜索树(或叫二叉排序树)BinarySearchTree

      平衡树中的红黑树(黑色完美平衡二叉搜索树)RedBlackTree
    • 图:

      有向图 DirectedGraph

      无向图 UndirectedGraph
  • 其它(也许可以算做特色吧)
    • 红黑树中的删除节点

      讲到红黑树,一般都是有插入节点的代码实现,这个比较简单,

      而没有删除节点的代码实现,这个比较麻烦。

      至少本人在 npm 上数据结构相关的 JS 库中没有找到实现。
    • 图(有向图/无向图)中存储结构优化

      对于[邻接表 + 逆邻接表]的优化:

      有向图:使用十字链表

      无向图:使用邻接多重表

      来实现的图中数据结构的存储
    • 各种数据结构实现中代码注释详实

TODO 事项

若干。比如,哈希表在冲突的时候采用数组或链表来存储。

了解过 Java 源码的童鞋一定知道,

HashMap 在jdk1.8 之后引入了红黑树的设计,

当冲突个数大于8个的时候就将链表结构换为了红黑树。

当然是为了更高的效率,这里也可以来实现一下。

还有其它未介绍到的概念和操作,本人也是在不断学习中。

再比如,现在样例中做了对代码实现的确认,

并不是严格意义上的单测,作为工程化的项目必须使用测试框架。

<源码在此,免费点star啦>

GitHub/data-struct-js

Gitee/data-struct-js

除了可以查看源码学习讨论,

在前端工程中使用也是可以的!

npm i data-struct-js

结束语

之后本人还会继续完善下去,
也欢迎来自大佬的指点斧正,
如果有兴趣也可以一起完善。 也算基于这份 npm 包吧,计划的数据结构文章系列还要完成它,只是会用简单的代码实现。
另外,经典(排序)算法系列也即将在路上了。

最后,感谢您的阅读和支持~


【数据结构的JavaScript版实现】data-struct-js的npm包初版作成的更多相关文章

  1. 使用 js 和 Beacon API 实现一个简易版的前端埋点监控 npm 包

    使用 js 和 Beacon API 实现一个简易版的前端埋点监控 npm 包 前端监控,埋点,数据收集,性能监控 Beacon API https://caniuse.com/beacon 优点,请 ...

  2. 【Javascript】Windows下Node.js与npm的安装与配置

      1:先下载Node.js,网站https://nodejs.org/en/,左侧为稳定版,右侧为最新版,推荐稳定版 2:Node.js安装,运行下载后的.msi文件,一路下一步就可以了,我选择的安 ...

  3. node.js中npm包管理工具

    现在安装node.js,默认就会帮我们装上了npm包管理工具,npm主要用来下载,安装,管理第三方模块. 创建一个包描述文件: npm init [-y] 查看包的信息 npm info <pa ...

  4. node.js开发 npm包管理工具 npm 和 cnpm区别

    npm 允许用户从NPM服务器下载别人编写的第三方包到本地使用. 允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用. 允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用 np ...

  5. node.js开发 npm包管理工具

    npm介绍 说明:npm(node package manager)是nodejs的包管理器,用于node插件管理(包括安装.卸载.管理依赖等) 使用npm安装插件:命令提示符执行npm instal ...

  6. JavaScript 版数据结构与算法(二)队列

    今天,我们要讲的是数据结构与算法中的队列. 队列简介 队列是什么?队列是一种先进先出(FIFO)的数据结构.队列有什么用呢?队列通常用来描述算法或生活中的一些先进先出的场景,比如: 在图的广度优先遍历 ...

  7. JavaScript简明教程之Node.js

    Node.js是目前非常火热的技术,但是它的诞生经历却很奇特. 众所周知,在Netscape设计出JavaScript后的短短几个月,JavaScript事实上已经是前端开发的唯一标准. 后来,微软通 ...

  8. 数据结构C语言版 有向图的十字链表存储表示和实现

    /*1wangxiaobo@163.com 数据结构C语言版 有向图的十字链表存储表示和实现 P165 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h> ...

  9. JavaScript版MD5应用

    假设使用Java为一个字符串进行MD5操作,我想轻而易举:但是假设要在client为网页中字符串进行MD5操作又该怎么做呢? 代码1--为字符串等进行MD5操作的js文件(md5.js): /* * ...

随机推荐

  1. codeforce 1311 C. Perform the Combo 前缀和

    You want to perform the combo on your opponent in one popular fighting game. The combo is the string ...

  2. Codeforce1311B. WeirdSort (冒泡排序)

    You are given an array a of length n. You are also given a set of distinct positions p1,p2,-,pm, whe ...

  3. Entity Framework使用EntityState和Attach来保存数据变化以及更新实体的个别字段

    在使用Entity Framework作为ORM来存取数据的过程中,最常规的操作就是对数据对象的更新.本文将会包含如何Attach Entity到一个数据Context中,以及如何使用EntitySt ...

  4. LeetCode 56,区间合并问题

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode专题的第33篇文章,我们一起来看LeetCode的第56题,它的难度是Medium. 题意 这道题的题意也很简单,只有 ...

  5. uniapp 踩坑

    获取数据 可在 onLoad 生命周期中获取数据,接收一个参数 option 为上个页面传递的参数. 点击事件tap代替click 两者都会在点击时触发,但是在web手机端,clikc会有300ms延 ...

  6. andorid jar/库源码解析之EventBus

    目录:andorid jar/库源码解析 EventBus: 作用: 用于不同Activity,Service等之间传递消息(数据). 栗子: A页面:onCreate定义   EventBus.ge ...

  7. 从零开始学习docker之在docker中搭建redis(集群)

    docker搭建redis集群 docker-compose是以多容器的方式启动,非常适合用来启动集群 一.环境准备 云环境:CentOS 7.6 64位 二.安装docker-compose #需要 ...

  8. 单元测试中使用Spring的ReflectionTestUtils更方便

    1 简介 ReflectionUtils是Spring中一个常用的类,属于spring-core包:ReflectionTestUtils则属于spring-test包.两者功能有重叠的地方,而Ref ...

  9. 安装stanfordcorenlp成功,import stanfordcorenlp失败,出现错误:importerror-no-module-named-psutil

    1.问题描述 安装stanfordcorenlp成功,import stanfordcorenlp失败,pycharm中输入import stanfordcorenlp,然后运行,出现错误:impor ...

  10. Python爬虫丨大众点评数据爬虫教程(1)

    大众点评数据获取 --- 基础版本 大众点评是一款非常受普罗大众喜爱的一个第三方的美食相关的点评网站. 因此,该网站的数据也就非常有价值.优惠,评价数量,好评度等数据也就非常受数据公司的欢迎. 今天就 ...