js-collections-framework

0.0.3 • Public • Published

js-collections-framework

provides the basic javascript implementation of commonly used data structures.It includes following data structres

Demo

LIVE DEMO

Get started

This library is been bulit to use on both server side (nodeJs) as well as on client (Html/JS).

  • install it using npm
    npm install js-collections-framework
  • or download the project and refer the JCF file present in the dist/ folder
    <script src="./dist/JCF.min.js"></script>

Stack

In computer science, a stack is an abstract data type that serves as a collection of elements, with two principal operations: push, which adds an element to the collection, and pop, which removes the most recently added element that was not yet removed. The order in which elements come off a stack gives rise to its alternative name, LIFO (for last in, first out). Additionally, a peek operation may give access to the top without modifying the stack.

How to use stack in JCF

  • In nodeJS
        var JCF = require('js-collections-framework');
        var stack = JCF.Stack;
        var myStack = new stack();
  • On Client Side(HTML/JS)
        //JCF is a global variable and will be available as soon as JCF lib is included
        var stack = JCF.Stack;
        var myStack = new stack();

Methods/Operations on stack

Method   Explanation Example
.push(data) used to push data on to stack myStack.push(data);
.pop() used to pop data from the stack myStack.pop();
myStack[index] returns the data at the given index myStack[3]
.length retruns the length of the stack myStack.length;

Complete Example

    <html>
    <head>
        <script src="https://rohithsathya.github.io/JCF/dist/JCF.min.js"></script>
        <script>
             var stack = JCF.Stack;
             var myStack = new stack();
             //push Data
             myStack.push("1");
             myStack.push("2");
             myStack.push("3");

             //print the stack data
             console.log("Printing Stack");
              for (var i = 0; i < myStack.length; i++) {
                console.log(myStack[i]);
            }

            //pop data
            myStack.pop();

             //print the stack data
             console.log("Printing Stack");
              for (var i = 0; i < myStack.length; i++) {
                console.log(myStack[i]);
            }

        </script>
    </head>
    <body>
        <h3>
            Look at the developer console for output
        </h3>
    </body>
</html>

Queue

Queue is an abstract data structure, somewhat similar to Stacks. Unlike stacks, a queue is open at both its ends. One end is always used to insert data (enqueue) and the other is used to remove data (dequeue). Queue follows First-In-First-Out methodology, i.e., the data item stored first will be accessed first.

How to use queue in JCF

  • In nodeJS
        var JCF = require('js-collections-framework');
        var queue = JCF.Queue;
        var myQueue = new queue();
  • On Client Side(HTML/JS)
        //JCF is a global variable and will be available as soon as JCF lib is included
        var queue = JCF.Queue;
        var myQueue = new queue();

Methods/Operations on stack

Method   Explanation Example
.add(data) used to push data on to queue myQueue.add(data);
.remove() used to remove an item from the queue myQueue.remove();
.peek() returns the next item from the queue myQueue.peek();
myQueue[index] returns the data at the given index myQueue[3]
.length retruns the length of the queue myQueue.length;

Complete Example

    <html>
    <head>
        <script src="https://rohithsathya.github.io/JCF/dist/JCF.min.js"></script>
        <script>
             var queue = JCF.Queue;
             var myQueue = new queue();
             //push Data
             myQueue.add("1");
             myQueue.add("2");
             myQueue.add("3");

             //print the stack data
             console.log("Printing Queue");
              for (var i = 0; i < myQueue.length; i++) {
                console.log(myQueue[i]);
            }

            //pop data
            myQueue.remove();

             //print the stack data
             console.log("Printing Queue");
              for (var i = 0; i < myQueue.length; i++) {
                console.log(myQueue[i]);
            }

            //peaking Queue
            console.log("Peaking Queue")
            console.log(myQueue.peek());

        </script>
    </head>
    <body>
        <h3>
            Look at the developer console for output
        </h3>
    </body>
</html>

Linked List

A linked list is a sequence of data structures, which are connected together via links. Linked List is a sequence of links which contains items. Each link contains a connection to another link. Linked list is the second most-used data structure after array.

How to use linkedlist in JCF

  • In nodeJS
        var JCF = require('js-collections-framework');
        var linkedList = JCF.LinkdeList;
        var myLinkedList = new linkedList();
  • On Client Side(HTML/JS)
        //JCF is a global variable and will be available as soon as JCF lib is included
        var queue = JCF.LinkdeList;
        var myLinkedList = new linkedList();

Methods/Operations on stack

Method   Explanation Example
.addAtStart(data) used to add data at the start of linked list myLinkedList.addAtStart(data);
.addAtEnd(data) used to add data at the end of linked list myLinkedList.addAtEnd(data);
.addAt(data,pos) used to add data at the given position of linked list myLinkedList.addAtStart(data,pos);
.getHead() used to add data at the Head/begining of linked list myLinkedList.getHead();
.getTail() used to add data at the Tail/end of linked list myLinkedList.getTail(data,pos);
.itemAt(pos) used to get data at the given position of linked list myLinkedList.itemAt(pos);
.removeHead() used to remove head from the linked list myLinkedList.removeHead();
.removeTail() used to remove tail from the linked list myLinkedList.removeTail();
.removeAt(pos) used to remove an item at a given position from the linked list myLinkedList.removeAt(position);
.length retruns the length of the linked list myLinkedList.length;

Complete Example

   <html>
    <head>
        <script src="https://rohithsathya.github.io/JCF/dist/JCF.min.js"></script>
        <script>
             var linkedList = JCF.LinkedList;
             var myLinkedList = new linkedList();

        //add Data to LL
        console.log("Adding 1,2,3 to linked list");
        myLinkedList.addAtStart("1");
        myLinkedList.addAtStart("2");
        myLinkedList.addAtStart("3");
        console.log("prinitng...it should print 3,2,1");
        prinitLinkedList();
        myLinkedList.addAtEnd("4");
        console.log("prinitng...it should print 3,2,1,4");
        prinitLinkedList();
        myLinkedList.addAt("5", 2);
        console.log("prinitng...it should print 3,2,5,1,4");
        prinitLinkedList();

        console.log("Getting Head Node");
        console.log(myLinkedList.getHead());

        console.log("Getting Tail Node");
        console.log( myLinkedList.getTail());

        console.log("Getting Node At Position 2");
        console.log(myLinkedList.itemAt(2));
        

        console.log("Removing Node At Position 3");
        myLinkedList.removeAt(3);
        console.log("prinitng...it should print 3,2,5,4");
        prinitLinkedList();

        console.log("Removing Head Node");
        myLinkedList.removeHead();
        console.log("prinitng...it should print 2,5,4");
        prinitLinkedList();

        console.log("Removing Tail Node");
        myLinkedList.removeTail();
        console.log("prinitng...it should print 2,5");
        prinitLinkedList();

        function prinitLinkedList(){
            for (var i = 0; i < myLinkedList.length; i++) {
                console.log(myLinkedList.itemAt(i));
            }
        }
           

        </script>
    </head>
    <body>
        <h3>
            Look at the developer console for output
        </h3>
    </body>
</html>

Tree

In computer science, a tree is a widely used abstract data type (ADT)—or data structure implementing this ADT—that simulates a hierarchical tree structure, with a root value and subtrees of children with a parent node, represented as a set of linked nodes.

How to use tree in JCF

  • In nodeJS
        var JCF = require('js-collections-framework');
        var treeNode = JCF.Tree;
        var myRootNode = new treeNode("root");
  • On Client Side(HTML/JS)
        //JCF is a global variable and will be available as soon as JCF lib is included
        var treeNode = JCF.Tree;
        var myRootNode = new treeNode("root");

Methods/Operations on stack

Method   Explanation Example
.addChild(node) used to add a child node to a given node myRootNode.addChild(node);
.getRoot() used to get the root node of a given node myChildNode.getRoot();
.getParent() used to get the immediate parent of a given node myChildNode.getParent();
.getChildren() returns the list of all the imediate children of a given nodes myRootNode.getChildren();
.getValue() returns the value of a given node myRootNode.getValue();
.delete() deletes the given node from the tree myRootNode.delete();
.toJson() retruns the tree as json object myRootNode.toJson();
.toString() retruns the tree as string myRootNode.toString();

Complete Example

  <html>
    <head>
        <script src="https://rohithsathya.github.io/JCF/dist/JCF.min.js"></script>
        <script>
             var treeNode = JCF.Tree;

        var rootNode = new treeNode("CEO");
        var engNode = new treeNode("ENG");
        var manNode = new treeNode("MAN");
        var opsNode = new treeNode("OPS");


        var emp1Node = new treeNode("emp1");
        var emp2Node = new treeNode("emp2");
        var emp3Node = new treeNode("emp3");
        var emp4Node = new treeNode("emp4");
        var emp5Node = new treeNode("emp5");
        var emp6Node = new treeNode("emp6");

        //now create a tree
        rootNode.addChild(engNode);
        rootNode.addChild(manNode);
        rootNode.addChild(opsNode);

        engNode.addChild(emp1Node);
        engNode.addChild(emp2Node);
        manNode.addChild(emp3Node);
        manNode.addChild(emp4Node);
        opsNode.addChild(emp5Node);
        opsNode.addChild(emp6Node);

        console.log("\n=====================TREE=====================\n");
        console.log("Printing Tree");
        console.log(rootNode.toJson());
        console.log("Printing root");
        console.log(emp1Node.getRoot());
        console.log("printing parent of emp3, it should be MAN");
        console.log(emp3Node.getParent());
        console.log("Prinitng children of ENG, should be emp1 and 2");
        console.log(engNode.getChildren());
        console.log("Prinitng the value of OPS dept, it should be OPS");
        console.log(opsNode.getValue());
        console.log("Deleting the OPS node");
        opsNode.delete();
        console.log(emp1Node.getRoot());
        </script>
    </head>
    <body>
        <h3>
            Look at the developer console for output
        </h3>
    </body>
</html>

Graph

A graph is a pictorial representation of a set of objects where some pairs of objects are connected by links. The interconnected objects are represented by points termed as vertices, and the links that connect the vertices are called edges. Formally, a graph is a pair of sets (V, E), where V is the set of vertices and E is the set of edges, connecting the pairs of vertices.

How to use graph in JCF

  • In nodeJS
        var JCF = require('js-collections-framework');
        var graphNode = JCF.GraphNode;
        var graph = JCF.Graph;

        var myGraph = new graph();
        var nodeA = new graphNode("A");
  • On Client Side(HTML/JS)
        //JCF is a global variable and will be available as soon as JCF lib is included
        var graphNode = JCF.GraphNode;
        var graph = JCF.Graph;

        var myGraph = new graph();
        var nodeA = new graphNode("A");

Methods/Operations on stack

Method   Explanation Example
.addVertex(graphNode) used to add a vertex into to a given graph myGraph.addVertex(nodeA);
.addEdge(graphNodeSrc,graphNodeDest) used to add an edge from src node to dest node myGraph.addEdge(nodeA,nodeB);
.removeVertex(graphNode) removes the given vertex from graph myGraph.removeVertex(nodeA);
.removeEdge(graphNodeSrc,graphNodeDest) removes an edge b/w src node and dest node myGraph.removeEdge(nodeA,nodeB);
.getAllVertices() returns the list of all the vertices in the graph myGraph.getAllVertices();
.getAdjacentVertices(graphNode) returns the list of adjacent vertices of a given vertex myGraph.getAdjacentVertices(nodeA);
.getOutdegree(graphNode) retruns the out degree of a given vertex myGraph.getOutdegree(nodeA);
.getIndegree(graphNode) retruns the in degree of a given vertex myGraph.getIndegree(nodeA);
.toJson() retruns the graph as json object for persistence myGraph.toJson();
.toString() retruns the graph as string for persistence myGraph.toString();
.loadFromJson(jsonObj) used to load the graph from json persisted previously myGraph.loadFromJson(graphJson);
.dfs(startingNode) retruns DFS path for a given starting node myGraph.dfs(nodeA);
.bfs(startingNode) retruns BFS path for a given starting node myGraph.bfs(nodeA);

Complete Example

  <html>

<head>
    <script src="https://rohithsathya.github.io/JCF/dist/JCF.min.js"></script>
    <script>
        var graphNode = JCF.GraphNode;
        var graph = JCF.Graph;

        var myGraph = new graph();
        var nodeA = new graphNode("A");
        var nodeB = new graphNode("B");
        var nodeC = new graphNode("C");
        var nodeD = new graphNode("D");


        myGraph.addVertex(nodeA);
        myGraph.addVertex(nodeB);
        myGraph.addVertex(nodeC);
        myGraph.addVertex(nodeD);

        myGraph.addEdge(nodeA, nodeB);
        myGraph.addEdge(nodeA, nodeC);
        myGraph.addEdge(nodeA, nodeD);
        myGraph.addEdge(nodeB, nodeD);

        console.log("\n============GRAPH===================\n");
        console.log("Prinitng all vertices");
        console.log(myGraph.getAllVertices())
        console.log("Prinitng Neigbhours of nodeA, this should be B,C,D");
        console.log(myGraph.getAdjacentVertices(nodeA));
        console.log("Prinitng outdegree of A, it should be 3");
        console.log(myGraph.getOutdegree(nodeA));
        console.log("Prinitng indegree of B, it should be 1");
        console.log(myGraph.getIndegree(nodeB));
        console.log("Prinitng the graph in JSON");
        console.log(myGraph.toJson());
        console.log("DFS startting with nodeB");
        console.log(myGraph.dfs(nodeB));
        console.log("BFS startting with nodeA");
        console.log(myGraph.dfs(nodeA));
        console.log("remove Edge between a and b");
        myGraph.removeEdge(nodeA, nodeB);
        console.log("Prinitng outdegree of A, it should be 2");
        console.log(myGraph.getAdjacentVertices(nodeA));
        console.log("Removing vertex nodeB");
        myGraph.removeVertex(nodeB);
        console.log("Prinitng the graph in JSON");
        console.log(myGraph.toJson());
    </script>
</head>

<body>
    <h3>
        Look at the developer console for output
    </h3>
</body>

</html>

Package Sidebar

Install

npm i js-collections-framework

Weekly Downloads

2

Version

0.0.3

License

MIT

Last publish

Collaborators

  • getrohith.sathya