npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@js-labs/data-structures

v1.0.0-alpha.1.1

Published

There are neither a lot of resources on internet nor any book which guides and dictates best practices in the implementation of popular Data Structures using Javascript. The purpose of this library is to provide cooked implementation of populare data stru

Downloads

6

Readme

Data Structures Logo

Data Structures in Javascript

Build Status Coverage Status

Background

There are neither a lot of resources on internet nor any book which guides and dictates best practices in the implementation of popular Data Structures using Javascript. The purpose of this library is to provide cooked implementation of popular data structures in javascript.

Installation

npm - npm install @js-labs/data-structures

Getting hands dirty

Clone the repo git clone https://github.com/linux-nerd/data-structures.js.git

Install the dependencies npm install

Run dev build

  • For linux and darwin npm run dev

  • For windows npm run dev:win32

To execute unit test cases

  • For linux and darwin npm test

  • For windows npm test:win32

Trigger production build

  • For linux and darwin npm run build

  • For windows npm run build:win32

List of Data Structures

Data structures covered so far -

Contribution

Your contribution is highly appreciated. You can contribute in several ways -

  • Opening an issue in the tracker
  • Updating and adding documentation
  • Adding new features
  • Adding demo

Vision

Once development is complete. This library will work in -

  • All supported Browsers
  • Node

and can be written in -

  • es5
  • es6
  • typescript

and will be published in

  • ~~npm~~
  • bower

Binary Search Tree

Import BST class and instantiate it

import { BST } from '@js-labs/data-structures/lib/ds';
const bst = new BST

Insert values in binary search Tree

bst.insert(5);
bst.insert(20);
bst.insert(10);

Find size of the binary search tree

bst.len // 3

Find an item in the binary search tree

bst.lookup(10) // returns an object with keys hasVal, currentNode and parentNode

Height of the binary search tree or a node

bst.height() //gives height of the BST 1
bst.height(bst.lookup(10).currentNode) // gives the height of the node - 0

Traverse the BST and return a List

bst.traverse('inOrder') // traverse method expects a parameter - inOrder|preOrder|postOrder| levelOrder

Delete elements from binary search tree

bst.delete(10);
bst.delete(20);

Graph

Import Graph class and instantiate it and create an object of adjacency list implementation of Graph. To create a directed graph pass the string argument 'directed'. If the Graph class is called without a parameter then by default its undirected graph.

import { Graph } from '@js-labs/data-structures/lib/ds';
const graph = new Graph; // this will create an undirected Graph
const graph = new Graph('directed'); // this will create a directed graph or diGraph

const adjList = graph.createGraph('adjList'); // create Adjacency List implementation of graph

Add and remove a node to the graph

// add a node
adjList.addNode('A');
adjList.addNode('B');

// remove a node
adjList.removeNode('A');
adjList.removeNode('B');

Add and remove an edge between two nodes to the graph. iF a node is not added, then it first adds the node and then create an edge.

// add an edge
adjList.addEdge('A', 'B', 200); // it will add an edge between A and B of weight 200
adjList.addEdge('B', 'C'); // it will first add node C and then create an edge b/w B and C

// remove an edge
adjList.removeEdge('A', 'B');
adjList.removeEdge('B', 'C');

Find size of the graph.

adjList.size // 3

Find weight of the edge in weighted graph

adjList.getEdgeWeight('A', 'B');

Queue

Import Queue class and create a queue object.

import { Queue } from '@js-labs/data-structures/lib/ds';
const queue = new Queue;

Add and remove elements to and from the created queue respectively

// add elements to the queue
queue.enqueue('A');
queue.enqueue(123);

// remove elements from the queue
queue.dequeue();
queue.dequeue();

Get size and top element in the queue

queue.size() // 2
queue.top() // A

Clear the entire queue at once

queue.clear() // this will empty the queue

Linked List

Import LinkedList data structure and create a list object.

import { LinkedList } from '@js-labs/data-structures/lib/ds';
const list = new LinkedList;

Insert and Remove Items from the list

// inserts item at the end of the list
list.insert('firstVal');
list.insert('SecondVal');

list.insertAfter('Mid', 'firstVal');  // insert Mid after firstVal
list.insertBefore('xyz', 'secondVal'); // insert xyz before secondVal

list.remove('firstVal') // removes firstVal from the list.

Get size and search for an item and check if the list is empty

list.size() // 3
list.search('xyz') // true
list.search('abc') // false
list.isEmpty() // false

Iterate over list using for...of loop

for(const item of list) {
  console.log(item) // 'firstVal', 'Mid', 'xyz', 'secondVal'
}

Usage as spread operator

const items = [...list] // ['firstVal', 'Mid', 'xyz', 'secondVal']