jsdslib

Javascript data structures library

Usage no npm install needed!

<script type="module">
  import jsdslib from 'https://cdn.skypack.dev/jsdslib';
</script>

README

jsdsLib(javascript data structure Library)

  • Version: 1.2

자바스크립트로 구현된 자료구조 라이브러리

Link

Contents

라이브러리 설치

npm

npm install jsdsLib         # local
npm install -g jsdsLib      # global

List

  • 라이브러리 추가하기
  1. HTML
<-- Used jsdelivr cdn -->
<-- npm -->
 <script src="https://cdn.jsdelivr.net/npm/jsdslib@1.2/dist/List.min.js"></script>
<-- Github -->
<script src="https://cdn.jsdelivr.net/gh/CODEMCD/jsdsLib@1.2/dist/List.min.js"></script>
  1. npm
var List = require("jsdslib").List;
  • 초기화
var list = new List();
console.log(list.toString());     // ==  document.writeln(list.toString());
[]

.clear()

List 를 초기화한다.

  • 예제
var list = new List();
list.push_back(1);
list.push_back(2);
list.push_back(3);
console.log(list.toString());     // ==  document.writeln(list.toString());
list.clear();
console.log(list.toString());
[1, 2, 3]
[]

.find()

원소를 List 앞에서 부터 찾는다.

  • .find(item)
    • item: 찾을 노드
    • Return Value: 찾았다면 해당 노드, 찾지못했다면 null 반환
  • 예제
var list = new List();
list.push_back(1);
list.push_back(2);
list.push_back(3);
console.log(list.find(2).element);   //해당 노드의 element를 반환
console.log(list.find(4));
2
null

.find_reverse()

원소를 List 뒤에서 부터 찾는다.

  • .find_reverse(item)
    • item: 찾을 노드
    • Return Value: 찾았다면 해당 노드, 찾지못했다면 null 반환
  • 예제
var list = new List();
list.push_back(1);
list.push_back(2);
list.push_back(3);
console.log(list.find_reverse(2).element);   //해당 노드의 element를 반환
console.log(list.find_reverse(4));
2
null

.push_front()

원소를 List 맨 앞에 삽입한다.

  • .push_front(element)
    • element: 삽입할 원소
    • Return Value: 없음
  • 예제
var list = new List();
list.push_front(1);
list.push_front(2);
list.push_front(3);
console.log(list.toString());
[3, 2, 1]

.pop_front()

List 맨 앞의 원소를 삭제한다.

  • .pop_front()
    • Return Value: List 가 비어있으면 null, 비어있지 않으면 해당 노드 반환
  • 예제
var list = new List();
list.push_back(1);
list.push_back(2);
list.push_back(3);
console.log(list.toString());
console.log(list.pop_front().element);
console.log(list.pop_front().element);
console.log(list.pop_front().element);
[1, 2, 3]
1
2
3

.push_back()

원소를 List 맨 뒤에 삽입한다.

  • .push_back(element)
    • element: 삽입할 원소
    • Return Value: 없음
  • 예제
var list = new List();
list.push_back(1);
list.push_back(2);
list.push_back(3);
console.log(list.toString());
[1, 2, 3]

.pop_back()

List 맨 뒤의 원소를 삭제한다.

  • .pop_front()
    • Return Value: List 가 비어있으면 null, 비어있지 않으면 해당 노드 반환
  • 예제
var list = new List();
list.push_back(1);
list.push_back(2);
list.push_back(3);
console.log(list.toString());
console.log(list.pop_back().element);
console.log(list.pop_back().element);
console.log(list.pop_back().element);
[1, 2, 3]
3
2
1

.insert()

원소를 해당 노드 뒤에 삽입한다.

  • .insert(element, item)
    • element: 삽입할 원소
    • item: 기준 노드
    • Return Value: item 을 찾지 못하면 null 반환
  • 예제
var list = new List();
list.push_back(1);
list.push_back(2);
list.push_back(3);
console.log(list.toString());
list.insert(2.5, 2);
console.log(list.toString());
[1, 2, 3]
[1, 2, 2.5, 3]

.insert_prev()

원소를 해당 노드 앞에 삽입한다.

  • .insert_prev(element, item)
    • element: 삽입할 원소
    • item: 기준 노드
    • Return Value: item 노드를 찾지 못하면 null 반환
  • 예제
var list = new List();
list.push_back(1);
list.push_back(2);
list.push_back(3);
console.log(list.toString());
list.insert_prev(2.5, 3);
console.log(list.toString());
[1, 2, 3]
[1, 2, 2.5, 3]

.remove()

해당 노드를 삭제한다.

  • .remove(item)
    • item: 삭제할 노드
    • Return Value: item 노드를 찾지 못하면 null, 찾으면 해당 노드 반환
  • 예제
var list = new List();
list.push_back(1);
list.push_back(2);
list.push_back(3);
console.log(list.toString());
list.remove(2);
console.log(list.toString());
[1, 2, 3]
[1, 3]

.merge()

두 List 를 합친다.

  • .merge(otherList)
    • otherList: 합칠 List 오브젝트
    • Return Value: otherList가 List 오브젝트가 아니라면 에러 반환
  • 예제
var list1 = new List();
list1.push_back(1);
list1.push_back(2);
list1.push_back(3);
console.log('list1: ', list1.toString());

var list2 = new List();
list2.push_back(4);
list2.push_back(5);
list2.push_back(6);
console.log('list2: ', list2.toString());

list1.merge(list2);
console.log('merged list1: ', list1.toString());
list1:  [1, 2, 3]
list2:  [4, 5, 6]
merged list1:  [1, 2, 3, 4, 5, 6]

.toString()

List 안의 전체 원소를 형식에 맞춰서 반환한다.

  • 예제
var list = new List();
list.push_back(1);
list.push_back(2);
list.push_back(3);
list.push_back('Hello');
console.log(list.toString());
[1, 2, 3, 'Hello']

.length(), .size()

List 길이를 반환한다.

  • 예제
var list = new List();
list.push_back(1);
list.push_back(2);
list.push_back(3);
console.log(list.length());
console.log(list.size());
3
3

Queue

  • 라이브러리 추가하기
  1. HTML
<-- Used jsdelivr cdn -->
<-- npm -->
 <script src="https://cdn.jsdelivr.net/npm/jsdslib@1.2/dist/Queue.min.js"></script>
<-- Github -->
<script src="https://cdn.jsdelivr.net/gh/CODEMCD/jsdsLib@1.2/dist/Queue.min.js"></script>
  1. npm
var Queue = require("jsdslib").Queue;
  • 초기화 매개변수에 배열을 추가해서 초기화할 수 있다. 첫 번째 매개변수의 배열만 유효하고 나머지 매개변수는 무시한다.
//방법 1
var q = new Queue();
console.log(q.toString());       // ==  document.writeln(q.toString());

//방법 2
var q = new Queue([1, 2, 3]);
console.log(q.toString());
[]
[1, 2, 3]

.clear()

Queue 를 초기화한다.

  • 예제
var q = new Queue();
q.enqueue(1);
q.enqueue(2);
q.enqueue(3);
console.log(q.toString());
q.clear();
console.log(q.toString());
[1, 2, 3]
[]

.empty()

Queue 가 비어있는지 검사한다.

  • .empty()
    • Return Value: Queue 가 비어있으면 true, 비어있지 않으면 false 반환
  • 예제
var q = new Queue();
q.enqueue(1);
q.enqueue(2);
q.enqueue(3);
console.log(q.empty());
q.clear();
console.log(q.empty());
false
true

.front()

Queue 의 맨 앞 원소를 반환한다. (Queue 가 비어있으면 null 반환)

  • 예제
var q = new Queue();
q.enqueue(1);
q.enqueue(2);
q.enqueue(3);
console.log(q.front());
1

.back()

Queue 의 맨 앞 원소를 반환한다. (Queue 가 비어있으면 null 반환)

  • 예제
var q = new Queue();
q.enqueue(1);
q.enqueue(2);
q.enqueue(3);
console.log(q.back());
3

.enqueue(), .push()

Queue 맨 뒤에 원소를 삽입한다. (.push()도 같은 기능을 한다.)

  • .enqueue(element)
    • element: 삽입할 원소
    • Return Value: 삽입한 원소
  • 예제
var q = new Queue();
q.enqueue(1);
q.enqueue(2);
q.enqueue(3);
console.log(q.toString());
q.push(4);
q.push(5);
q.push(6);
console.log(q.toString());
[1, 2, 3]
[1, 2, 3, 4, 5, 6]

.dequeue(), .pop()

Queue 맨 앞의 원소를 삭제한다. (.pop()도 같은 기능을 한다.)

  • .dequeue()
    • Return Value: Queue 가 비어있으면 null, 비어있지 않으면 해당 원소 반환
  • 예제
var q = new Queue();
q.enqueue(1);
q.enqueue(2);
q.enqueue(3);
console.log(q.dequeue());
console.log(q.dequeue());
console.log(q.pop());
1
2
3

.toString()

Queue 안의 전체 원소를 형식에 맞춰서 반환한다.

  • 예제
var q = new Queue();
q.enqueue(1);
q.enqueue(2);
q.enqueue(3);
q.enqueue('Hello');
console.log(q.toString());
[1, 2, 3, 'Hello']

.length(), .size()

Queue 길이를 반환한다.

  • 예제
var q = new Queue();
q.enqueue(1);
q.enqueue(2);
q.enqueue(3);
console.log(q.length());
console.log(q.size());
3
3

Stack

  • 라이브러리 추가하기
  1. HTML
<-- Used jsdelivr cdn -->
<-- npm -->
<script src="https://cdn.jsdelivr.net/npm/jsdslib@1.2/dist/Stack.min.js"></script>
<-- Github -->
<script src="https://cdn.jsdelivr.net/gh/CODEMCD/jsdsLib@1.2/dist/Stack.min.js"></script>
  1. npm
var Stack = require("jsdslib").Stack;
  • 초기화 매개변수에 배열을 추가해서 초기화할 수 있다. 첫 번째 매개변수의 배열만 유효하고 나머지 매개변수는 무시한다.
//방법 1
var s = new Stack();
console.log(s.toString());       // ==  document.writeln(s.toString());

//방법 2
var s = new Stack([1, 2, 3]);
console.log(s.toString());
[]
[1, 2, 3]

.clear()

Stack 을 초기화한다.

  • 예제
var s = new Stack();
s.push(1);
s.push(2);
s.push(3);
console.log(s.toString());
s.clear();
console.log(s.toString());
[1, 2, 3]
[]

.empty()

Stack 이 비어있는지 검사한다.

  • .empty()
    • Return Value: Stack 이 비어있으면 true, 비어있지 않으면 false 반환
  • 예제
var s = new Stack();
s.push(1);
s.push(2);
s.push(3);
console.log(s.empty());
s.clear();
console.log(s.empty());
false
true

.peek()

Stack 의 맨 뒤 원소를 반환한다. (Stack 이 비어있으면 null 반환)

  • 예제
var s = new Stack();
s.push(1);
s.push(2);
s.push(3);
console.log(s.peek());
3

.push()

Stack 맨 뒤에 원소를 삽입한다.

  • .push(element)
    • element: 삽입할 원소
    • Return Value: 삽입한 원소
  • 예제
var s = new Stack();
s.push(1);
s.push(2);
s.push(3);
console.log(s.toString());
[1, 2, 3]

.pop()

Stack 맨 뒤의 원소를 삭제한다.

  • .dequeue()
    • Return Value: Stack 이 비어있으면 null, 비어있지 않으면 해당 원소 반환
  • 예제
var s = new Stack();
s.push(1);
s.push(2);
s.push(3);
console.log(s.pop());
console.log(s.pop());
console.log(s.pop());
3
2
1

.toString()

Stack 안의 전체 원소를 형식에 맞춰서 반환한다.

  • 예제
var s = new Stack();
s.push(1);
s.push(2);
s.push(3);
s.push('Hello');
console.log(s.toString());
[1, 2, 3, 'Hello']

.length(), .size()

Stack 길이를 반환한다.

  • 예제
var s = new Stack();
s.push(1);
s.push(2);
s.push(3);
console.log(s.length());
console.log(s.size());
3
3

Deque

  • 라이브러리 추가하기
  1. HTML
<-- Used jsdelivr cdn -->
<-- npm -->
<script src="https://cdn.jsdelivr.net/npm/jsdslib@1.2/dist/Deque.min.js"></script>
<-- Github -->
<script src="https://cdn.jsdelivr.net/gh/CODEMCD/jsdsLib@1.2/dist/Deque.min.js"></script>
  1. npm
var Deque = require("jsdslib").Deque;
  • 초기화
var dq = new Deque();
console.log(dq.toString());       // ==  document.writeln(dq.toString());
[]

.clear()

Deque 을 초기화한다.

  • 예제
var dq = new Deque();
dq.push(1);
dq.push(2);
dq.push(3);
console.log(dq.toString());
dq.clear();
console.log(dq.toString());
[1, 2, 3]
[]

.empty()

Deque 이 비어있는지 검사한다.

  • .empty()
    • Return Value: Deque 이 비어있으면 true, 비어있지 않으면 false 반환
  • 예제
var dq = new Deque();
dq.push(1);
dq.push(2);
dq.push(3);
console.log(dq.empty());
dq.clear();
console.log(dq.empty());
false
true

.front()

Deque 의 맨 앞 원소를 반환한다. (Deque 이 비어있으면 null 반환)

  • 예제
var dq = new Deque();
dq.push(1);
dq.push(2);
dq.push(3);
console.log(dq.front().element);     //해당 노드의 element 를 반환한다.
1

.back()

Deque 의 맨 뒤 원소를 반환한다. (Deque 이 비어있으면 null 반환)

  • 예제
var dq = new Deque();
dq.push(1);
dq.push(2);
dq.push(3);
console.log(dq.back().element);     //해당 노드의 element 를 반환한다.
3

.push_front(), .unshift()

Deque 맨 앞에 원소를 삽입한다.

  • .push_front(element)
    • element: 삽입할 원소
  • 예제
var dq = new Deque();
dq.push_front(1);
dq.push_front(2);
dq.unshift(3);
console.log(dq.toString());
[3, 2, 1]

.pop_front(), .dequeue(), .shift()

Deque 맨 앞의 원소를 삭제한다.

  • .pop_front()
    • Return Value: Deque 이 비어있으면 null, 비어있지 않으면 해당 노드 반환
  • 예제
var dq = new Deque();
dq.push(1);
dq.push(2);
dq.push(3);
console.log(dq.pop_front().element);
console.log(dq.dequeue().element);
console.log(dq.shift().element);
1
2
3

.push_back(), .push(), .enqueue()

Deque 맨 뒤에 원소를 삽입한다.

  • .push_back(element)
    • element: 삽입할 원소
  • 예제
var dq = new Deque();
dq.push_back(1);
dq.push(2);
dq.enqueue(3);
console.log(dq.toString());
[1, 2 ,3]]

.pop_back(), .pop()

Deque 맨 앞의 원소를 삭제한다.

  • .pop_front()
    • Return Value: Deque 이 비어있으면 null, 비어있지 않으면 해당 노드 반환
  • 예제
var dq = new Deque();
dq.push(1);
dq.push(2);
dq.push(3);
console.log(dq.pop_back().element);
console.log(dq.pop_back().element);
console.log(dq.pop().element);
3
2
1

.toString()

Deque 안의 전체 원소를 형식에 맞춰서 반환한다.

  • 예제
var dq = new Deque();
dq.push(1);
dq.push(2);
dq.push(3);
dq.push('Hello');
console.log(dq.toString());
[1, 2, 3, 'Hello']

.length(), .size()

Deque 길이를 반환한다.

  • 예제
var dq = new Deque();
dq.push(1);
dq.push(2);
dq.push(3);
console.log(dq.length());
console.log(dq.size());
3
3

Priority Queue

  • 라이브러리 추가하기
  1. HTML
<-- Used jsdelivr cdn -->
<-- npm -->
<script src="https://cdn.jsdelivr.net/npm/jsdslib@1.2/dist/Priority_Queue.min.js"></script>
<-- Github -->
<script src="https://cdn.jsdelivr.net/gh/CODEMCD/jsdsLib@1.2/dist/Priority_Queue.min.js"></script>
  1. npm
var PriorityQueue = require("jsdslib").PriorityQueue;
  • 초기화 Priority Queue 는 최대 2개의 매개변수를 가질 수 있다.
  • PriorityQueue(arr, comp)
    • arr: 데이터가 담긴 배열
    • comp: 비교 함수, 설정하지 않으면 기본적으로 오름차순 정렬을 수행한다.
//비교 함수(내림차순)
var comp = function(a, b) {
    return a - b;
}

//방법 1, 매개변수 0개
var pq = new PriorityQueue();
//방법 2, 매개변수 1개(배열)
var pq = new PriorityQueue([2, 1, 3]);
//방법 3, 매개변수 1개(비교함수)
var pq = new PriorityQueue(comp);
//방법 4, 매개변수 1개(배열, 비교함수)
var pq = new PriorityQueue([2, 1, 3], comp);

.clear()

Priority Queue 을 초기화한다.

  • 예제
var pq = new PriorityQueue();
pq.enqueue(3);
pq.enqueue(2);
pq.enqueue(1);
pq.clear();
console.log(pq.toString());
[]

.empty()

Priority Queue 가 비어있는지 검사한다.

  • .empty()
    • Return Value: Priority Queue 가 비어있으면 true, 비어있지 않으면 false 반환
  • 예제
var pq = new PriorityQueue();
pq.enqueue(3);
pq.enqueue(2);
pq.enqueue(1);
console.log(pq.empty());
pq.clear();
console.log(pq.empty());
false
true

.enqueue(), .push()

Priority Queue 에 원소를 삽입한다.

  • .enqueue(element)
    • element: 삽입할 원소
  • 예제
var pq = new PriorityQueue();
pq.enqueue(3);
pq.enqueue(2);
pq.enqueue(1);
console.log(pq.toString());
[1, 3, 2]

.dequeue(), .pop()

Priority Queue 에서 우선순위가 가장 높은 원소를 삭제한다.

  • .dequeue()
    • Return Value: Priority Queue 가 비어있으면 null, 비어있지 않으면 해당 노드 반환
  • 예제
var pq = new PriorityQueue();
pq.enqueue(3);
pq.enqueue(2);
pq.enqueue(1);
console.log(pq.dequeue());
console.log(pq.dequeue());
console.log(pq.dequeue());
1
2
3

.toString()

Priority Queue 안의 전체 원소를 형식에 맞춰서 반환한다.

  • 예제
var pq = new PriorityQueue();
pq.enqueue(3);
pq.enqueue(2);
pq.enqueue(1);
pq.enqueue('Hello');
console.log(pq.toString());
[1, 3, 2, 'Hello']

.length(), .size()

Priority Queue 길이를 반환한다.

  • 예제
var pq = new PriorityQueue();
pq.enqueue(3);
pq.enqueue(2);
pq.enqueue(1);
console.log(pq.length());
console.log(pq.size());
3
3