All Projects → nickzuber → needle

nickzuber / needle

Licence: MIT license
📌📚 An extensive standalone data structure library for JavaScript.

Programming Languages

javascript
184084 projects - #8 most used programming language
C++
36643 projects - #6 most used programming language
python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to needle

Sc
Common libraries and data structures for C.
Stars: ✭ 161 (+544%)
Mutual labels:  linked-list, stack, queue, hashmap, heap
Algodeck
An Open-Source Collection of 200+ Algorithmic Flash Cards to Help you Preparing your Algorithm & Data Structure Interview 💯
Stars: ✭ 4,441 (+17664%)
Mutual labels:  linked-list, stack, queue, heap
Data-Structure-Algorithm-Programs
This Repo consists of Data structures and Algorithms
Stars: ✭ 464 (+1756%)
Mutual labels:  linked-list, stack, queue, heap
Algo Tree
Algo-Tree is a collection of Algorithms and data structures which are fundamentals to efficient code and good software design. Creating and designing excellent algorithms is required for being an exemplary programmer. It contains solutions in various languages such as C++, Python and Java.
Stars: ✭ 166 (+564%)
Mutual labels:  linked-list, stack, queue, heap
Learningmasteringalgorithms C
Mastering Algorithms with C 《算法精解:C语言描述》源码及Xcode工程、Linux工程
Stars: ✭ 615 (+2360%)
Mutual labels:  linked-list, stack, queue, heap
C Macro Collections
Easy to use, header only, macro generated, generic and type-safe Data Structures in C
Stars: ✭ 192 (+668%)
Mutual labels:  stack, queue, hashmap, heap
Data-Structures
Algorithmic Problems Solutions -- hash table code featured in geeksforgeeks
Stars: ✭ 44 (+76%)
Mutual labels:  linked-list, stack, queue, heap
Data Structures With Go
Data Structures with Go Language
Stars: ✭ 121 (+384%)
Mutual labels:  linked-list, stack, queue
Data Structures
Common data structures and algorithms implemented in JavaScript
Stars: ✭ 139 (+456%)
Mutual labels:  linked-list, stack, queue
Interviewbit
Collection of Abhishek Agrawal's gists solutions for problems on https://www.interviewbit.com
Stars: ✭ 166 (+564%)
Mutual labels:  linked-list, stack, queue
Data-structures
Data Structures in Java
Stars: ✭ 13 (-48%)
Mutual labels:  linked-list, stack, queue
Javascript Datastructures Algorithms
📚 collection of JavaScript and TypeScript data structures and algorithms for education purposes. Source code bundle of JavaScript algorithms and data structures book
Stars: ✭ 3,221 (+12784%)
Mutual labels:  linked-list, stack, queue
Cracking The Coding Interview
Solutions for Cracking the Coding Interview - 6th Edition
Stars: ✭ 35 (+40%)
Mutual labels:  linked-list, stack, queue
Data Structures
This repository contains some data structures implementation in C programming language. I wrote the tutorial posts about these data structures on my personal blog site in Bengali language. If you know Bengali then visit my site
Stars: ✭ 82 (+228%)
Mutual labels:  linked-list, stack, queue
Buckets Js
A complete, fully tested and documented data structure library written in pure JavaScript.
Stars: ✭ 1,128 (+4412%)
Mutual labels:  linked-list, stack, queue
Geeksforgeeks Dsa 2
This repository contains all the assignments and practice questions solved during the Data Structures and Algorithms course in C++ taught by the Geeks For Geeks team.
Stars: ✭ 53 (+112%)
Mutual labels:  linked-list, stack, queue
data-structure-project
自己实现集合框架系列整理总结
Stars: ✭ 29 (+16%)
Mutual labels:  stack, queue, hashmap
ctl
My variant of the C Template Library
Stars: ✭ 105 (+320%)
Mutual labels:  stack, queue, hashmap
adif
用标准c语言开发的常用数据结构和算法基础库,作为应用程序开发接口基础库,为编写高性能程序提供便利,可极大地缩短软件项目的开发周期,提升工程开发效率,并确保软件系统运行的可靠性、稳定性。
Stars: ✭ 33 (+32%)
Mutual labels:  linked-list, stack, heap
Data-Structures-and-Algorithms
Data Structures and Algorithms implementation in Python
Stars: ✭ 31 (+24%)
Mutual labels:  linked-list, stack, queue

Needle


Needle is a standalone extensive data structure library in JavaScript.

Install as an npm package or download the minified file of the latest version.

Installation

You can install Needle as a node package with npm, and it's as easy as:

$ npm install --save node-needle

If you prefer to use Needle on the client side, just download the minified file of the latest version and include it in your webpage:

<!-- The complete Needle library -->
<script src="path/to/needle.min.js"></script>

Usage

When you have Needle installed, you can use it on the server in Node like so:

const Needle = require('node-needle');

// Example: Create a new instance of a hashmap
var map = Needle.Hashmap();

or you can just use it on the client side like so:

// Needle gets pushed onto the global scope under the alias "Needle"
var bst = new Needle.BinarySearchTree();

API Reference

Needle has a variety of different data structures at its disposal. Here is a reference to all of the currently available data structures that Needle supports. Some data structures have not been added yet and they will appear unavailable.

If you feel that there should be additional data structures added to this library, send me a message and let me know what you had in mind.

Note: In the API, * refers to any type. This is commonly used when specifying the type of data; since all types of data are supported when inserting custom data into a data structure.


Arrays

Lists

Heaps

General Trees

  • Trie
  • Radix Tree
  • B Trie

Binary Trees

Multiway Trees

Metric Trees

  • VP Tree
  • BK Tree
  • M Tree
  • Cover Tree

Hashes

Graphs

  • Adjacency Matrix
  • Directed Graph
  • Multigraph

Needle.BinarySearchTree()

root - Node - The root node of the binary tree.
compare - function - Compares two elements to each other to determine the ordering of the heap.

Note: The default compare function is defined as

function defaultCompare(a, b){
  return (a < b);
}
  • (constructor)([< function >compare]) - object - Creates a Binary Search Tree and if a function is passed in, it overrides the default compare function with the function defined by compare.
  • hasRight(< Node >node) - boolean - Returns true if the given Node has a right component.
  • hasLeft(< Node >node) - boolean - Returns true if the given Node has a left component.
  • isLeaf(< Node >node) - boolean - Returns true if the given Node is a leaf.
  • emptySubtree(< Node >node) - void - Empties the subtree of the given Node.
  • emptyTree() - void - Empties the entire tree.
  • heightSubtree(< Node >node) - number - Returns the height of the subtree derived from Node.
  • numNodesSubtree(< Node >node) - number - Returns the number of nodes of the subtree derived from Node.
  • numLeavesSubtree(< Node >node) - number - Returns the number of leaves of the subtree derived from Node.
  • insert(< * >data [, < Node >node]) - void - Inserts a node into the binary search tree given by data. The Node argument will determine which subtree to attempt to insert the node at. Inserting at the root subtree is selected by default if this parameter is left blank (recommended).
  • search(< * >data [, < Node >node]) - Node || false - Searched for the node given by data in the binary search tree. The Node argument will determine which subtree to attempt to search for the node. Searching at the root subtree is selected by default if this parameter is left blank (recommended).

Needle.BinaryHeap()

heap - Array - The array based heap acting as a binary heap.
compare - function - Compares two elements to each other to determine the ordering of the heap.

Note: The default compare function is defined as

function defaultCompare(a, b){
  return (a < b);
}
  • (constructor)([< function >compare]) - object - Creates a Binary Heap and if a function is passed in, it overrides the default compare function with the function defined by compare.
  • peek() - element - Returns the root or top element of the heap.
  • size() - number - Returns the amount of elements stored in the heap.
  • insert(< * >data) - void - Inserts the element given by data into the heap and adjusts the heap accordingly.
  • delete() - void - Removes the root or top element from the heap and adjusts the heap accordingly.
  • heapify(< array >arr) - void - Converts the input array into a legal binary heap.

Needle.BitArray()

data - Array - The array of bit sequences.

  • (constructor)([< number >size = 0]) - object - Creates a Bit Array and allocates memory for the size if argument is given.
  • get(< number >index) - number - Returns the bit in the BitArray at location index.
  • set(< number >index, < boolean >value) - void -
  • size(< number >size) - void -
  • resize() - void - Adjusts the BitArray size to the given argument size.
  • complement() - BitArray - Resolves the complement of the calling BitArray.
  • union(< BitArray >bitarray) - BitArray - Resolves the union between the calling BitArray and the argument bitarray.
  • intersection(< BitArray >bitarray) - BitArray - Resolves the intersection between the calling BitArray and the argument bitarray.
  • difference(< BitArray >bitarray) - BitArray - Resolves the difference between the calling BitArray and the argument bitarray.

Needle.DoublyLinkedList()

head - Node - The first node in the linked list.
tail - Node - The last node in the linked list.
size - number - The number of nodes in the linked list.

  • (constructor)([< * >data]) - object - Creates a Doubly Linked List and inserts a node at the head of the newly created list if data is given.
  • insertFront(< * >data) - void - Create a node from data and inserts at the front of the list.
  • insertNth(< number >index, < * >data) - boolean - Create a node from data and insert in the location of the linked list specified by index.
  • insertAfter(< * >targetData, < * >data) - boolean - Create a node from data and insert after the node which has the data specified by targetData and returns true if the element was successfully added to the linked list.
  • insertBack(< * >data) - void - Create a node from data and inserts at the back of the list.
  • remove(< * >data) - boolean - Removes the element specified by data and returns true if the element was successfully found and removed from the linked list.
  • removeNth(< number >index) - void - Removes the element in the location of the linked list specified by index.
  • find(< * >data) - Node || false - Finds the element specified by data and returns that Node if the element was successfully found but returns false if the node was not found.
  • findNth(< number >index) - Node - Finds the element in the location of the linked list specified by index and returns that Node.

Needle.Hashmap()

state - number - Holds the current hash of the internal window.

  • (constructor)() - object - Creates and instatiates a Hashmap object.
  • put(< * >key, < * >value) - void - Inserts an entry into the hashmap, which maps the given key to its respective value.
  • get(< * >key) - value - Returns the value that is paired with the given key.
  • delete(< * >key) - boolean - Deletes the entry that is associated with the given key, returns true if deletion was successful and false if the entry was not found.
  • iterator() - key - Resets the internal iterator Node to the first entry and returns the unhashed key.
  • next() - key - Iterates to the next Node and returns an the unhashed key.
  • size() - number - Returns the amount of unique entries within the hashmap.

Needle.RollingHash()

state - number - The internal hash value of the current window.

  • (constructor)(< number >base) - object - Creates and instatiates a rolling hash object and an argument is passed in which assigns the base of the rolling hash.
  • set(< string || Array >arg) - void - Sets the internal window of the rolling hash given arg in the relative base.
  • slide(< string || number >old, < string || number >new) - number - Shifts the internal window a single rotation by removing the old segment and appending on the new segment, then returns the newly updates state of the internal window.
  • skip(< string || number >old) - void - Disjoins the old segment from the internal window.
  • append(< string || number >new) - void - Appends a new segment onto the internal window.
  • hash(< number || string || Arrayarg>) - number - Takes in either a string, number (assumed in the relative base), or Array of elements in the relative base, and returns the hash of the argument.

Needle.SinglyLinkedList()

head - Node - The first node in the linked list.
size - number - The number of nodes in the linked list.

  • (constructor)([< * >data]) - object - Creates a Singly Linked List and inserts a node at the head of the newly created list if data is given.
  • insertFront(< * >data) - void - Create a node from data and inserts at the front of the list.
  • insertNth(< number >index, < * >data) - boolean - Create a node from data and insert in the location of the linked list specified by index.
  • insertAfter(< * >targetData, < * >data) - boolean - Create a node from data and insert after the node which has the data specified by targetData and returns true if the element was successfully added to the linked list.
  • insertBack(< * >data) - void - Create a node from data and inserts at the back of the list.
  • remove(< * >data) - boolean - Removes the element specified by data and returns true if the element was successfully found and removed from the linked list.
  • removeNth(< number >index) - void - Removes the element in the location of the linked list specified by index.
  • find(< * >data) - Node || false - Finds the element specified by data and returns that Node if the element was successfully found but returns false if the node was not found.
  • findNth(< number >index) - Node - Finds the element in the location of the linked list specified by index and returns that Node.

Needle.Stack()

top - Node - The top node in the stack.
size - number - The number of nodes in the stack.

  • (constructor)([< * >data]) - object - Creates a Stack and if data is passed given, the top element of the queue, defined by data, is created and inserted.
  • peek() - Node - Returns the top Node of the stack.
  • push(< * >data) - void - Adds and element, defined by data, to the top of the stack.
  • pop() - Node - Removes the top element of the stack and returns the Node that was previously the top, and just deleted.

Needle.Queue()

front - Node - The first node in the queue.
back - Node - The last node in the queue.
size - number - The number of nodes in the queue.

  • (constructor)([< * >data]) - object - Creates a Queue and if data is passed given, the first element of the queue, defined by data, is created and inserted.
  • enqueue(< * >data) - void - Adds and element, defined by data, to the queue.
  • dequeue() - void - Removes the first element of the queue.

Examples

Here are an assortment of examples using various data structures provided by Needle. If you wish there to be examples of a data structure in particular, feel free to let me know what you have in mind.

// Priority Queue implementation using a binary heap

const Needle = require('node-needle');

var Level = function(key, value){
  this.key = key;
  this.value = value;
}

var priorityQueue = new Needle.BinaryHeap(function(a, b){
  return a.key < b.key;
});

priorityQueue.insert(new Level(3, "Level 3"));
priorityQueue.insert(new Level(1, "Level 1"));
priorityQueue.insert(new Level(2, "Level 2"));

priorityQueue.peek(); // => {1, "Level 1"}
priorityQueue.size(); // => 3

priorityQueue.delete();

priorityQueue.peek(); // => {2, "Level 2"}
priorityQueue.size(); // => 2
// Iterating through a Hashmap

const Needle = require('node-needle');

var map = new Needle.Hashmap();

map.put(1, "Level 1");
map.put("2", "Level 2");
map.put({key: "three"}, "Level 3");

// Insertion order is kept, despite key value
for(var it = map.iterator(); it !== null; it = map.next()){
  console.log(it); // 1 -> "2" -> {key: "three"}
  console.log(map.get(it)); // "Level 1" -> "Level 2" -> "Level 3"
}

License

MIT

Copyright (c) 2015 Nick Zuber

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].