data-structure-visualization v1.3.0
π· data_structure_JS
NAVER D2 CAMPUS FEST κ²°μΉμ§μΆν!
INTRODUCTION
JS μ λ€μ΄ν°λΈνκ² μ‘΄μ¬νμ§ μλ μλ£κ΅¬μ‘°λ€μ ꡬνν λΌμ΄λΈλ¬λ¦¬μ λλ€. λν μλ£κ΅¬μ‘° μκ°ν μΉ λ·° νλ‘ νΈμλκ° κ΅¬νλμ΄ μμ΄ νμ΅ μ©λ λ±μΌλ‘ νμ© κ°λ₯ν©λλ€.
DEPENDENCY
jest
expect
ν μ€νΈλ₯Ό μν΄ jest μ expectλ₯Ό μ¬μ©νμμ΅λλ€.
- clone
snapshot μμ±μ μν΄ object cloning (deep, circular) λΌμ΄λΈλ¬λ¦¬μΈ cloneμ μ¬μ©νμ΅λλ€.
- babel-preset-env
jestκ° ES6 μΌλΆ λ¬Έλ²μ μ΄ν΄νμ§ λͺ»ν΄ λ°λ²¨μ μ¬μ©νμμ΅λλ€.
ejs
express
visualization μΉ μλ²λ₯Ό λ리기 μν΄ express / ejsλ₯Ό μ¬μ©νμμ΅λλ€.
- eslint
μ½λ μ€νμΌμ eslint(airbnb)μ λ°λ¦ λλ€.
USAGE
- Singly Linked List
import { SinglyLinkedList } from 'data-structure-visualization';
// SLL μΈμ€ν΄μ€ μμ±
const sll = new SinglyLinkedList();
sll.push(1); // [1]
sll.push(2); // [1, 2]
sll.size(); // 2
sll.pop(); // 2
sll.pop(); // 1
sll.pop(); // undefined
sll.unshift(2); // [2]
sll.unshift(1); // [1, 2]
sll.shift(); // 1
sll.shift(); // 2
sll.shift(); // undefined
// sll.insert(index, value)
sll.insert(0, 1); // [1]
sll.insert(0, 2); // [2, 1]
sll.insert(1, 4); // [2, 4, 1]
sll.insert(4, 5); // Error: index is out of range!
// sll.remove(index);
sll.remove(1); // 4
// [2, 1]
sll.remove(0); // 2
// [1]
sll.remove(4); // Error: index is out of range!
sll.push(2); // [1, 2]
sll.push(3); // [1, 2, 3]
sll.reverse();
sll; // [3, 2, 1]
- Doubly Linked List
import { DoublyLinkedList } from 'data-structure-visualization';
// DLL μΈμ€ν΄μ€ μμ±
const dll = new DoublyLinkedList();
dll.push(1); // [1]
dll.push(2); // [1, 2]
dll.size(); // 2
dll.pop(); // 2
dll.pop(); // 1
dll.pop(); // undefined
dll.unshift(2); // [2]
dll.unshift(1); // [1, 2]
dll.shift(); // 1
dll.shift(); // 2
dll.shift(); // undefined
// dll.insert(index, value)
dll.insert(0, 1); // [1]
dll.insert(0, 2); // [2, 1]
dll.insert(1, 4); // [2, 4, 1]
dll.insert(4, 5); // Error: index is out of range!
// dll.remove(index);
dll.remove(1); // 4
// [2, 1]
dll.remove(0); // 2
// [1]
dll.remove(4); // Error: index is out of range!
dll.push(2); // [1, 2]
dll.push(3); // [1, 2, 3]
dll.reverse();
dll; // [3, 2, 1]
- Stack
import { Stack } from 'data-structure-visualization';
// μ€ν μΈμ€ν΄μ€ μμ±
const stack = new Stack();
stack.push(1);
stack.push(2);
stack.size(); // 2
stack.pop(); // 2
stack.pop(); // 1
stack.pop(); // undefined
- Queue
import { Queue } from 'data-structure-visualization';
// ν μΈμ€ν΄μ€ μμ±
const queue = new Queue();
queue.enqueue(1);
queue.enqueue(2);
queue.size(); // 2
queue.dequeue(); // 1
queue.dequeue(); // 2
queue.dequeue(); // undefined
- Dequeue
import { Dequeue } from 'data-structure-visualization';
// λ± μΈμ€ν΄μ€ μμ±
const dequeue = new Dequeue();
dequeue.pushHead(1); // [1]
dequeue.pushTail(2); // [1, 2]
dequeue.pushHead(3); // [3, 1, 2]
dequeue.size(); // 3
dequeue.popTail(); // 2
dequeue.popHead(); // 3
dequeue.popHead(); // 1
dequeue.popHead(); // undefined
- Heap
import { Heap } from 'data-structure-visualization';
// ν μΈμ€ν΄μ€ μμ±
// new Heap(isMax = true)
// μμ±μμ μΈμλ‘ boolean κ°μ μ€ μ μλ€.
// true μ΄λ©΄ max heap, false μ΄λ©΄ min heapμ΄ μμ±λκ³ , κΈ°λ³Έκ°μ true μ΄λ€.
const heap = new Heap();
// insert μΈμκ° number νμ
μ΄ μλλ©΄ μλ¬κ° λ°μνλ€.
heap.insert('not number'); // Error: Invalid value is given!
heap.insert(4); // [4]
heap.insert(6); // [6, 4]
heap.insert(5); // [6, 4, 5]
heap.insert(10); // [10, 6, 5, 4]
heap.size(); // 4
heap.pop(); // 10
// [6, 4, 5]
heap.pop(); // 6
// [5, 4]
heap.pop(); // 5
// [4]
heap.pop(); // 4
// []
heap.pop(); // undefined
- Priority Queue
import { PriorityQueue } from 'data-structure-visualization';
// μ°μ μμ ν μΈμ€ν΄μ€ μμ±
const pq = new PriorityQueue();
// pq.enqueue(priority, value)
// priority κ° number νμ
μ΄ μλλ©΄ μλ¬κ° λ°μνλ€.
pq.enqueue('not number', 'val'); // Error: Invalid value is given!
pq.enqueue(3, 'wash your hand');
// [{3, 'wash your hand'}]
pq.enqueue(4, 'eat food');
// [{3, 'wash your hand'}, {4, 'eat food'}]
pq.enqueue(1, 'find out location of toilet');
// [{1, 'find out location of toilet'}, {4, 'eat food'}, {3, 'wash your hand'}]
pq.size(); // 3
pq.dequeue(); // {priority: 1, value: 'find out location of toilet'}
// [{3, 'wash your hand'}, {4, 'eat food'}]
pq.dequeue(); // {priority: 3, value: 'wash your hand'}
// [{4, 'eat food'}]
pq.dequeue(); // {priority: 4, value: 'eat food'}
// []
pq.dequeue(); // undefined
- Binary Search Tree
import { BinarySearchTree } from 'data-structure-visualization';
// μ΄μ§νμνΈλ¦¬ μΈμ€ν΄μ€ μμ±
const bst = new BinarySearchTree();
// insert μ μΈμκ° number μ΄μΈμ νμ
μΌ κ²½μ° μλ¬ λ°μ
bst.insert('not number'); // Error: Invalid valud is given!
bst.insert(4);
// 4
bst.insert(3);
// 4
// 3
bst.insert(10);
// 4
// 3 10
bst.insert(100);
// 4
// 3 10
// 100
bst.find(3); // true
bst.find(11); // false
bst.remove(10);
// 4
// 3 100
bst.remove(20); // Error: given value doesn't exist!!
- Graph
import { Graph } from 'data-structure-visualization';
// κ·Έλν μΈμ€ν΄μ€ μμ±
const graph = new Graph();
graph.addVertex('a');
graph.addVertex('b');
graph.addVertex('b'); // Error: given value already exists!
graph.addVertex('c');
graph.sizeVertex(); // 3
graph.addEdge('a', 'b');
graph.addEdge('a', 'z'); // Error: given value doesn't exist!
graph.addEdge('a', 'c');
// a
// / \
// b c
graph.sizeEdge(); // 2
graph.removeEdge('a', 'b');
graph.removeEdge('a', 'z'); // Error: given value doesn't exist!
// a
// \
// b c
graph.sizeEdge(); // 1
graph.removeVertex('c');
graph.removeVertex('d'); // Error: given value doesn't exist!
// a
//
// b
// removeVertex λ©μλλ₯Ό μ€ννλ©΄ ν΄λΉ vertexμ μ°κ²°λμ΄ μλ λͺ¨λ edgeλ€μ΄ μ κ±°λλ€.
graph.sizeVertex(); // 2
graph.sizeEdge(); // 0
- B - Tree
νμ¬ νμ b-tree λ§ μ§μν©λλ€.
import { BTree } from 'data-structure-visualization';
// B-tree μΈμ€ν΄μ€ μμ±
// μμ±μ ν¨μμ 첫λ²μ§Έ μΈμλ‘ b-treeμ μ°¨μ μ λ¬.
const btree = new BTree(3); // 3μ°¨ b-tree μμ±
new Btree(4); // Error : invalid value is given! (νμ¬ νμ b-tree λ§ μ§μν©λλ€.)
btree.insert(5);
btree.insert(8);
btree.insert(11);
btree.insert(13);
btree.insert(15);
btree.insert(15); // Error : given value already exist!
btree.size(); // 5
// 8
// / \
// 5 11 13 15
btree.find(13); // BTreeNode { values: [12 ,13, 15], children: [], limit: 3 }
btree.find(1); // false
btree.remove(8);
// 11
// / \
// 5 13 15
btree.remove(1); // Error : given value doesn't exist!
btree.size(); // 4
TEST
- ν μ€νΈ μ€ν
npm run test
SERVER LISTENING
λ£¨νΈ λλ ν 리μμ npm run start λ‘ visualization μΉ μλ²λ₯Ό 3000λ² ν¬νΈμ μ€νμν¬ μ μμ΅λλ€.
npm run start
μΉ λ·° frontend μμ νμ΄μ§ : http://ec2-13-209-66-132.ap-northeast-2.compute.amazonaws.com/
LICENSE
MIT