@datastructures-es6/core
Version:
Implementation of the most common data structures in Javascript
149 lines (125 loc) • 6.64 kB
Markdown
# Data Structures ES6
Implementation of the most common data structures in Javascript (ES6+), including linear and non-linear ones, such as `Array`, `Linked List`, `Queue`, `Stack` and `Binary Tree`.
Futhermore, you will find here implementation of some interesting algorithms like `Quick Sort` for sorting arrays and `Breadth First Search` or `Depth First Search (inOrder, preOrder, postOrder)` for binary trees.
## Instalation
```bash
npm i @datastructures-es6/core
```
## How to use this lib
1. After install the package on your personal project, you may import the code in your files:
```javascript
import {
Array,
LinkedList,
Queue,
Stack,
BinaryTree
} from '@datastructures-es6/core/src/index.js';
```
2. Creating and using `data structures` (examples).
#### Array [(code implementation)](https://github.com/andrefillypesilva/datastructures-es6/blob/main/src/modules/linear-data-structures/components/array/array.component.js)
```javascript
const array = new Array();
array.push(10);
array.push(6);
array.push(2);
array.sort();
console.log(array.toString());
```
#### Linked List [(code implementation)](https://github.com/andrefillypesilva/datastructures-es6/blob/main/src/modules/linear-data-structures/components/linked-list/linked-list.component.js)
```javascript
const linkedList = new LinkedList();
linkedList.prepend(444);
linkedList.append(3);
linkedList.insert(1, 22);
linkedList.delete(0);
console.log(linkedList.get());
```
#### Queue [(code implementation)](https://github.com/andrefillypesilva/datastructures-es6/blob/main/src/modules/linear-data-structures/components/queue/queue.component.js)
```javascript
const queue = new Queue();
queue.enqueue(1);
queue.enqueue(2);
queue.enqueue(3);
queue.enqueue(4);
queue.enqueue(5);
queue.dequeue();
queue.dequeue();
let currentQueueItem = queue.peek();
while (currentQueueItem) {
console.log(currentQueueItem.value);
currentQueueItem = currentQueueItem.next;
}
```
#### Stack [(code implementation)](https://github.com/andrefillypesilva/datastructures-es6/blob/main/src/modules/linear-data-structures/components/stack/stack.component.js)
```javascript
const stack = new Stack();
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
stack.push(5);
stack.pop();
stack.pop();
let currentStackItem = stack.peek();
while (currentStackItem) {
console.log(currentStackItem.value);
currentStackItem = currentStackItem.next;
}
```
#### Binary Tree [(code implementation)](https://github.com/andrefillypesilva/datastructures-es6/blob/main/src/modules/non-linear-data-structures/components/binary-tree/binary-tree.component.js)
```javascript
const binaryTree = new BinaryTree();
binaryTree.insert(5);
binaryTree.insert(9);
binaryTree.insert(6);
binaryTree.insert(2);
binaryTree.insert(4);
binaryTree.insert(3);
binaryTree.insert(8);
console.log(binaryTree.breadthFirstSearch());
```
## Available methods
**ARRAY**
- **get(index?: number)**: returns the element value for a provided index or returns the entire array in case you do not provide an index.
- **push(value: any)**: pushes the provided value in the current array.
- **length()**: returns the length of the current array.
- **pop()**: removes the last element from the current array and returns it.
- **update(index: number, value: any)**: updates the value for a new provided one in the provided index.
- **shift()**: removes the first element from the current array and returns the resulting array.
- **unshift(value: any)**: inserts the provided value in the beginning of the current array.
- **find(value: any)**: if the current array has the provided value, it returns the finded index, else it returns -1.
- **sort()**: returns the sorted array, using ```Quick sort``` algorithm.
- **toString()**: returns the entire array in a `string` format.
- **join(term: string)**: join all values of the current array into a string, separated by the provided term.
- **concat(term: Array | any)**: concat the current array with a provided term (it can be any value or other Array).
- **splice(startIndex: number, quantityToDelete: number, items: any)**: returns a new array with the provided value inserted in the provided index, shifting the remaining elements to right. However, if you provide a ```n``` value greater than zero in the ```quantity to delete``` argument, it will delete the ```n``` elements after the provided index and replace the value instead of them.
- **slice(startIndex: number, endIndex?: number)**: returns a slice of the current array, based on the start/end indexes provided (if you do not provide the end index, it will consider the length of the current array).
**LINKED LIST**
- **prepend(value: any)**: inserts the provided element in the beginning of the linked list and this element becomes the ```head```.
- **append(value: any)**: inserts the provided element in the end of the linked list and this element becomes the ```tail```.
- **lookup(value: any)**: finds the provided element in the linked list.
- **insert(position: number, value: any)**: inserts the provided element in the provided position.
- **delete(position: number)**: removes an element from the provided position.
- **get()**: returns a string containing the entire linked list.
**QUEUE**
- **enqueue(value: any)**: inserts the selected value in the end of the queue.
- **dequeue()**: removes the first element of the queue.
- **lookup(value: any)**: finds the selected element in the queue and return it.
- **peek()**: return the first element of the queue.
**STACK**
- **push(value: any)**: inserts the provided value in the top of the stack.
- **pop()**: removes the element in the top of the stack.
- **lookup(value: any)**: finds the provided element in the stack.
- **peek()**: return the element in the top of the stack.
**BINARY TREE**
- **insert(value: any)**: inserts the provided value in the correct position on the current binary tree.
- **delete()**: removes the provided value from the binary tree.
- **lookup(value: any)**: finds the provided element on the current binary tree.
- **breadthFirstSearch()**: return current binary tree after parse through the `Breadth First Search` algorithm.
- **depthFirstSearch(type: string)**: return current binary tree after parse through the `Depth First Search` algorithm using the approach provided by the type argument (it can be `inOrder`, `preOrder` or `postOrder`).
## Contributing
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
Please make sure to update tests as appropriate.
## License
[MIT](https://choosealicense.com/licenses/mit/)