数据结构的JavaScript版实现data-struct-js的npm包初版作成
Posted 码路工人
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构的JavaScript版实现data-struct-js的npm包初版作成相关的知识,希望对你有一定的参考价值。
【数据结构的javascript版实现】data-struct-js的npm包初版作成
码路工人 CoderMonkey
【数据结构的JavaScript版实现】
拖了这么久,终于趁着春节假期把初版(即计划的内容)完成了。
[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包初版作成的主要内容,如果未能解决你的问题,请参考以下文章
在vanilla JavaScript中把element.dataset(一个DOMStringMap对象)转换成一个 "真正的 "JSON对象?
《剑指Offer:专项突破版》 - 数组部分 JavaScript 题解
javascript版format函数,方便实现复杂字串连接