【数据结构的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包初版作成

原文地址:https://www.cnblogs.com/CoderMonkie/p/data-struct-js.html

时间: 2024-11-11 01:42:30

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

node.js中npm包管理工具

现在安装node.js,默认就会帮我们装上了npm包管理工具,npm主要用来下载,安装,管理第三方模块. 安装指定的包: npm install <package-name> 默认会安装在当前目录下的 node_modules 目录下,如果 node_modules 不存在,则会自动创建. 本地安装包,如果包里有可执行文件,则npm会把可执行文件安装到 node_modules/.bin 目录下. 安装指定版本的包: npm install <package-name>@<v

数据结构(Javascript版)

正在学习数据结构,学的是C语言版的,把里面的例子用Javascript重写了一遍,如果有什么错误的话欢迎提出(持续更新). 一.线性表 一般线性表合并: 1 function addList(la,lb){ 2 var arrA=[],arrB=[]; //声明两个线性表 3 4 //获取输入值 5 arrA=la.value.split(',').map(function(item){return parseInt(item);}); 6 arrB=lb.value.split(',').ma

JavaScript简明教程之Node.js

Node.js是目前非常火热的技术,但是它的诞生经历却很奇特. 众所周知,在Netscape设计出JavaScript后的短短几个月,JavaScript事实上已经是前端开发的唯一标准. 后来,微软通过IE击败了Netscape后一统桌面,结果几年时间,浏览器毫无进步.(2001年推出的古老的IE 6到今天仍然有人在使用!) 没有竞争就没有发展.微软认为IE6浏览器已经非常完善,几乎没有可改进之处,然后解散了IE6开发团队!而Google却认为支持现代Web应用的新一代浏览器才刚刚起步,尤其是浏

JavaScript版MD5应用

如果使用Java为一个字符串进行MD5操作,我想轻而易举:可是如果要在客户端为网页中字符串进行MD5操作又该怎么做呢? 代码1--为字符串等进行MD5操作的js文件(md5.js): /* * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message * Digest Algorithm, as defined in RFC 1321. * Version 2.1 Copyright (C) Paul Johns

数据结构c语言版串的操作

#include<stdio.h> #include<malloc.h> #include<string.h> //定义字符串的结构体 typedef struct { char *str;//字符串 int maxLength;//最大可以存放字符的长度 int length;//目前的字符长度 }DString; //1.初始化操作 //初始化操作用来建立和存储串的动态数组空间以及给相关的数据域赋值 void Initiate(DString *s,int max,

深入浅出数据结构C语言版(5)——链表的操作

上一次我们从什么是表一直讲到了链表该怎么实现的想法上:http://www.cnblogs.com/mm93/p/6574912.html 而这一次我们就要实现所说的承诺,即实现链表应有的操作(至于游标数组--我决定还是给它单独写个博文比较好~). 那么,我们的过程应该是怎么样的呢?首先当然是分析需要什么操作,然后再逐一思考该如何实现,最后再以代码的形式写出来. 不难发现,我们希望链表能支持的(基础,可以由此延伸)操作就是: 1.给出第n个元素 2.在第n个元素的后面插入一个元素(包含在最后一个

javascript日历控件——纯javascript版

平时只有下班时间能code,闲来写了个纯javascript版.引用该calendar.js文件,然后给要设置成日历控件的input的id设置成calendar,该input就会变成日历控件. <!doctype html> <html> <head> <meta charset="utf-8"> <title>日历控件</title> <script src="js/calendar.js&quo

最严格的身份证校验(JavaScript版)

在JavaWeb研发过程中为了获取有效的用户信息,校验其数据的有效性非常是必要,以下贴出在项目中用到的关于身份证的校验: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312&quo

javascript版in_array函数用法举例

javascript版in_array函数,用于判断数组中是否存在特定值. 判断一个字符串或者数字是否在数组内,很多程序语言都有这样一样专门的函数,比如PHP的in_array().那么JS有木有呢,很遗憾,JS木有这样的函数,于是想到伟大的JQ是否封装了这个函数,找到了API,JQ的确封装了这个函数jQuery.inArray( value, array ) 搜索数组中指定值并返回它的索引(如果没有找到则返回-1).value要搜索的值.array一个数组,通过它来搜索.当然,处于学习,自己也