【数据结构的JavaScript版实现】data-struct-js的npm包初版作成
【数据结构的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包初版作成的更多相关文章
- 使用 js 和 Beacon API 实现一个简易版的前端埋点监控 npm 包
使用 js 和 Beacon API 实现一个简易版的前端埋点监控 npm 包 前端监控,埋点,数据收集,性能监控 Beacon API https://caniuse.com/beacon 优点,请 ...
- 【Javascript】Windows下Node.js与npm的安装与配置
1:先下载Node.js,网站https://nodejs.org/en/,左侧为稳定版,右侧为最新版,推荐稳定版 2:Node.js安装,运行下载后的.msi文件,一路下一步就可以了,我选择的安 ...
- node.js中npm包管理工具
现在安装node.js,默认就会帮我们装上了npm包管理工具,npm主要用来下载,安装,管理第三方模块. 创建一个包描述文件: npm init [-y] 查看包的信息 npm info <pa ...
- node.js开发 npm包管理工具 npm 和 cnpm区别
npm 允许用户从NPM服务器下载别人编写的第三方包到本地使用. 允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用. 允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用 np ...
- node.js开发 npm包管理工具
npm介绍 说明:npm(node package manager)是nodejs的包管理器,用于node插件管理(包括安装.卸载.管理依赖等) 使用npm安装插件:命令提示符执行npm instal ...
- JavaScript 版数据结构与算法(二)队列
今天,我们要讲的是数据结构与算法中的队列. 队列简介 队列是什么?队列是一种先进先出(FIFO)的数据结构.队列有什么用呢?队列通常用来描述算法或生活中的一些先进先出的场景,比如: 在图的广度优先遍历 ...
- JavaScript简明教程之Node.js
Node.js是目前非常火热的技术,但是它的诞生经历却很奇特. 众所周知,在Netscape设计出JavaScript后的短短几个月,JavaScript事实上已经是前端开发的唯一标准. 后来,微软通 ...
- 数据结构C语言版 有向图的十字链表存储表示和实现
/*1wangxiaobo@163.com 数据结构C语言版 有向图的十字链表存储表示和实现 P165 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h> ...
- JavaScript版MD5应用
假设使用Java为一个字符串进行MD5操作,我想轻而易举:但是假设要在client为网页中字符串进行MD5操作又该怎么做呢? 代码1--为字符串等进行MD5操作的js文件(md5.js): /* * ...
随机推荐
- 如何将MAC的 Terminal 行首变得清爽简洁一点?
作为一位开发人员,MAC带给我们更好的编程体验,Terminal也是经常会去操作的东西,但是说实话,默认的 Terminal 的各种设置,真的让我好难受 刚开始打开,可能看到的会是这样的,行首一大堆东 ...
- mysql-case..when知识点总结
case...when..有两种语法: 第一种: case case_value when when_value then statement_list [when when_value the ...
- INotifyPropertyChanged接口
INotifyPropertyChanged 接口用于通知客户端,通常执行绑定的客户端,属性值已更改. 例如,考虑 Person 具有一个名为属性对象 FirstName. 若要提供通用的属性更改通知 ...
- GoF23:设计模式概述
目录 学习设计模式的意义 GoF23 创建型模式(5种) 结构型模式(7种) 行为型模式(11种) OOP七大原则 开闭原则(总的纲领) 里氏替换原则 依赖倒置原则 单一职责原则 接口隔离原则 迪米特 ...
- Spring Boot 整合Web 层技术(整合Servlet)
1 整合Servlet 方式一1.1通过注解扫描完成Servlet 组件的注册 1.1.1创建Servlet /*** 整合Servlet 方式一*/@WebServlet(name = & ...
- spring boot的核心注解
1.@SpringBootApplication 是SpingBoot的启动类 此注解等同于@Configuration+@EnableAutoConfiguration+@ComponentScan ...
- 1、Hbase原理分析
一.Hbase介绍 1.1.对Hbase的认识 HBase作为面向列的数据库运行在HDFS之上,HDFS缺乏随机读写操作,HBase正是为此而出现. HBase参考 Google 的 Bigtable ...
- python学习第七天--文件系统常用模块os,os.path,pickle
模块是一个可用代码段的打包,后缀名为py,可被别的程序引入#使用import OS模块:operting system操作系统#import os os.chdir(path) 改变当前工作目录 os ...
- js--bom对象
bom:browser object model **navigator:获取浏览器的信息 **screen:获取屏幕的相关信息 **location:请求的url地址 **获取请求的url地址:lo ...
- [hdu5439 Aggregated Counting]公式化简,预处理
题意:按下列规则生成一组序列,令f(n)为n这个数在序列中出现的最后一个位置,求f(f(n))的值. 1. First, write down 1, 2 on a paper.2. The 2nd n ...