【数据结构的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. 数学--数论-- HDU 2601 An easy problem(约束和)

    Problem Description When Teddy was a child , he was always thinking about some simple math problems ...

  2. 【学习笔记:Python-网络编程】Socket 之初见

    Socket 是任何一种计算机网络通讯中最基础的内容.当你在浏览器地址栏中输入一个地址时,你会打开一个套接字,可以说任何网络通讯都是通过 Socket 来完成的. Socket 的 python 官方 ...

  3. MySQL命令1

    开始学习MySQL. // 创建数据库 CREATE DATABASE db_name; // 删除数据库 DROP DATABASE db_name; // 显示数据库 SHOW DATABASES ...

  4. ArcMap 0 (ArcGIS10.2安装)

    一如GIS深似海,从此相逢是故人(这句话适合初步接触GIS的,我算是初窥门径.还是道行太浅,只是多了感慨) 前言: 1. 本人GIS专业,对于ArcGIS较为熟悉.由于专业和其它经历需要,接触过不少各 ...

  5. Django model重写save方法及update踩坑记录

    一个非常实用的小方法 试想一下,Django中如果我们想对保存进数据库的数据做校验,有哪些实现的方法? 我们可以在view中去处理,每当view接收请求,就对提交的数据做校验,校验不通过直接返回错误, ...

  6. Linova and Kingdom(树型-贪心)

    题目大意:给定一棵树,1为首都(首都可以是工业城市也可以是旅游城市),一共有n个点. 其中要选出k个工业城市,每个工业城市出一个代表去首都,其快乐值是其途径旅游城市(非工业)的个数 求所有快乐值相加的 ...

  7. 带你看看Java的锁(二)-Semaphore

    前言 简介 Semaphore 中文称信号量,它和ReentrantLock 有所区别,ReentrantLock是排他的,也就是只能允许一个线程拥有资源,Semaphore是共享的,它允许多个线程同 ...

  8. 【HBase】通过Java代码实现HBase数据库中数据的增删改查

    目录 创建maven工程,导入jar包 java代码实现创建hbase表 java代码实现向hbase表中插入数据 java代码查询hbase数据 使用rowKey查询指定列族指定列的值 通过star ...

  9. FPGA自计数六位共阳极数码管动态显示2(调用task的方法)

    `timescale 1ns/1ps module adc_dis( clk , rst_n , sm_seg , sm_bit ); input clk;//50HZ input rst_n; :] ...

  10. (2)通信中为什么要进行AMC?

    AMC,Adaptive Modulation and Coding,自适应调制与编码. 通信信号的传输环境是变化不定的,信道环境时好时差.在这种情景下,我们不可能按照固定的MCS进行信号发送.假如信 ...