# common-data-structure

Help you more convenient to use some common JavaScript data structure

## Table of Contents

- [Installing](#installing)
- [Example](#example)
- [Require](#require)
- [API](#api)
  + [Queue](#queue)
  + [Deque](#deque)
  + [Stack](#stack)
  + [LinkedList](#linkedlist)
  + [DoublyLinkedList](#doublylinkedlist)
  + [Set](#set)
  + [HashMap](#hashmap)
  + [BinarySearchTree](#binarysearchtree)
  + [MinHead](#minhead)
  + [MaxHead](#maxhead)


## Installing

``` javascript
npm install --save common-data-structure
```

## Example

``` javascript
const { Stack } = require('common-data-structure')

const stack = new Stack() // create an instance
stack.push(5) // add an element
stack.push(6)
stack.peek() // peek top of stack element
stack.push(8)
stack.isEmpty() // Is the stack empty
stack.size() // stack length
```

## Require

``` javascript
// import your required classes
const {
  Queue,
  Deque,
  Stack,
  LinkedList,
  DoublyLinkedList,
  Set,
  HashMap,
  BinarySearchTree,
  MinHead,
  MaxHead
} = require('common-data-structure')
```

## API

#### Queue

| 方法名称 | 参数 | 描述 |
| --- | --- | --- |
| enqueue(element) | element: 元素 | 向队列尾部添加一个（或多个）新的项 |
| dequeue() |  | 移除队列的第一项（即排在队列最前面的项）并返回被移除的元素 |
| peek() |  | 返回队列中第一个元素——最先被添加，也将是最先被移除的元素 |
| isEmpty() |  | 如果队列中不包含任何元素，返回 true，否则返回 false |
| size() |  | 返回队列包含的元素个数，与数组的 length 属性类似 |
| clear() |  | 清空队列中所有的元素 |
| toString() |  | 返回字符串 |

#### Deque

| 方法名称 | 参数 | 描述 |
| --- | --- | --- |
| addFront(element) | element: 元素 | 在双端队列前添加新的元素 |
| addBack(element) | element: 元素 | 在双端队列后端添加新元素 |
| removeFront() |  | 在双端队列前端移除第一个元素 |
| removeBack() |  | 在双端队列后端移除第一个元素 |
| peekFront() |  | 返回双端队列前端的一个元素 |
| peekBack() |  | 返回双端队列后端的第一个元素 |
| isEmpty() |  | 如果队列中不包含任何元素，返回 true，否则返回 false |
| size() | | 返回队列包含的元素个数，与数组的 length 属性类似 |
| clear() | | 清空队列中所有的元素 |
| toString() | | 返回字符串 |

####  Stack

| 方法名称 | 参数 | 描述 |
| --- | --- | --- |
| push(element) | element: 元素 | 向栈添加元素 |
| pop() |  | 从栈移除元素 |
| peek() |  | 查看栈顶元素 |
| isEmpty() |  | 检查栈是否为空 |
| size() |  | 移除栈里的所有元素 |
| toString() |  | 返回对象的字符串表示形式 |

#### LinkedList

| 方法名称 | 参数 | 描述 |
| --- | --- | --- |
| push(element) | element: 元素 | 向链表尾部添加一个新元素 |
| insert(element) | element: 元素; index: 插入元素的位置 | 向链表的特定位置插入一个新元素 |
| getElementAt(index) | index: 元素的位置 | 在双端队列前端移除第一个元素 |
| removeBack(index) | index: 元素的位置 | 返回链表中特定位置的元素。如果链表中不存在这样的元素，则返回 undefined |
| remove(element) | element: 元素 | 从链表中移除一个元素 |
| indexOf(element) | element: 元素 | 返回元素在链表中的索引。如果链表中没有改元素则返回 -1 |
| removeAt(index) | index: 元素的位置 | 从链表的特定位置移除一个元素 |
| isEmpty() | | 判断链表是否为空 |
| getHead() | | 获取链表的头节点 |
| toString() | | 返回表示整个链表的字符串 |

#### DoublyLinkedList

| 方法名称 | 参数 | 描述 |
| --- | --- | --- |
| push(element) | element: 元素 | 向链表尾部添加一个新元素 |
| insert(element) | element: 元素; index: 插入元素的位置 | 向链表的特定位置插入一个新元素 |
| getElementAt(index) | index: 元素的位置 | 在双端队列前端移除第一个元素 |
| removeBack(index) | index: 元素的位置 | 返回链表中特定位置的元素。如果链表中不存在这样的元素，则返回 undefined |
| remove(element) | element: 元素 | 从链表中移除一个元素 |
| indexOf(element) | element: 元素 | 返回元素在链表中的索引。如果链表中没有改元素则返回 -1 |
| removeAt(index) | index: 元素的位置 | 从链表的特定位置移除一个元素 |
| isEmpty() | | 判断链表是否为空 |
| getHead() | | 获取链表的头节点 |
| toString() | | 返回表示整个链表的字符串 |

#### Set

| 方法名称 | 参数 | 描述 |
| --- | --- | --- |
| add(element) | element: 元素 | 向集合添加一个新元素 |
| delete(element) | element: 元素 | 从集合中移除一个元素 |
| has(element) | element: 元素 | 判断元素是否在集合中，存在则返回true,否则返回false |
| clear() | | 移除集合中的所有元素 |
| size() | | 返回集合所包含元素的数量 |
| values() | | 返回一个包含集合中所有元素的数组 |

#### HashMap

| 方法名称 | 参数 | 描述 |
| --- | --- | --- |
| set(key, value) | key: 键; value: 值 | 向散列表增加一个新的项 |
| delete(key) | key: 键 | 根据键值移除值 |
| get(key) | key: 键 | 根据键值返回特定的值 |
| hasKey() | key: 键 | 判断某键值是否存在散列表中 |
| clear() | | 删除字典中所有值 |
| size() | | 返回字典包含的数量 |
| isEmpty() | | 字典是否为空 |
| keys() | | 将字典所包含的所有键名以数组形式返回 |
| values() | | 将字典所包含的所有数值以数组形式返回 |
| keyValues() | | 将字典中所有[{键，值}]对返回 |
| forEach() | | 迭代字典中所有的键值对 |
| toString() | | 返回 hashmap 的字符串 |

#### BinarySearchTree

| 方法名称 | 参数 | 描述 |
| --- | --- | --- |
| insert(key) | key: 键 | 向树中插入一个新的键 |
| search(key) | key: 键 | 在树中查找一个键 |
| inOrderTraverse(callback) | callback: 回调函数 | 中序遍历所有节点 |
| preOrderTraverse(callback) | callback: 回调函数 | 先序遍历所有节点 |
| postOrderTraverse(callback) | callback: 回调函数 | 后序遍历所有节点 |
| min() |  | 返回树中最小的值/键 |
| max() | | 返回树中最大的值/键 |
| remove(key) | key: 键 | 从树中移除某个键 |

#### MinHead

| 方法名称 | 参数 | 描述 |
| --- | --- | --- |
| insert(value) | value: 值 | 向堆中插入一个新的值 |
| extract() |  | 移除最小值 |
| size() |  | 堆的大小 |
| isEmpty() |  | 是否为空 |
| clear() |  | 清除数据 |
| findMinimum() |  | 查找最小的值 |

#### MaxHead

| 方法名称 | 参数 | 描述 |
| --- | --- | --- |
| insert(value) | value: 值 | 向堆中插入一个新的值 |
| extract() |  | 移除最大值 |
| size() |  | 堆的大小 |
| isEmpty() |  | 是否为空 |
| clear() |  | 清除数据 |
| findMaxmum() |  | 查找最大的值 |
