/algorithm-library

基于JS实现的算法库

Primary LanguageJavaScript

使用JS来实现自己的算法库

  • 添加元素:push(element)
  • 删除元素:pop()
  • 查看栈顶元素:peek()
  • 判空:isEmpty()
  • 元素个数:size()
  • 清空:clear()
  • 输出字符串:toString()

队列

普通队列

  • 添加元素:enqueue(element)
  • 删除元素:dequeue()
  • 查看队头元素:peek()
  • 判空:isEmpty()
  • 元素个数:size()
  • 清空:clear()
  • 输出字符串:toString()

双端队列

  • 队列前端添加元素:addFront(element)
  • 队列后端添加元素:addBack(element)
  • 队列前端删除元素:removeFront()
  • 队列后端删除元素:removeBack()
  • 返回队列前端元素:peekFront()
  • 返回队列后端元素:peekBack()
  • 判空:isEmpty()
  • 元素个数:size()
  • 清空:clear()
  • 输出字符串:toString()

普通链表

  • 向链表尾部添加元素:push(element)
  • 返回链表特定位置的元素:getElementAt(index)
  • 从链表特定位置移除一个元素:removeAt(index)
  • 向链表特定位置插入一个元素:insert(element, index)
  • 返回元素在链表的索引:indexOf(element)
  • 从链表中移除一个元素:remove(element)
  • 元素个数:size()
  • 判空:isEmpty()
  • 输出字符串:toString()

双向链表

  • 重写 向链表特定位置插入一个元素:insert(element, index)
  • 重写 从链表特定位置移除一个元素:removeAt(index)

循环链表

  • 重写 向链表特定位置插入一个元素:insert(element, index)
  • 重写 从链表特定位置移除一个元素:removeAt(index)

有序链表

  • 重写 向链表特定位置插入一个元素:insert(element, index)

集合

  • 判断集合中是否存在:has(element)
  • 添加元素:add(element)
  • 删除元素:delete(element)
  • 清空:clear()
  • 元素大小:size()
  • 包含集合中所有值的数组:values()
  • 并集运算:union(otherSet)
  • 交集运算:intersection(otherSet)
  • 差集运算:difference(otherSet)
  • 子集运算:isSubsetOf(otherSet)

字典

  • 判断是否存在:hasKey(key)
  • 添加元素:set(key,value)
  • 移除元素:remove(key)
  • 查值:get(key)
  • 清空:clear()
  • 元素大小:size()
  • 判空:isEmpty()
  • 所有键值对数组:keyValues()
  • 所有键名数组:keys()
  • 所有键值数组:values()
  • 迭代:forEach(callbackFn)
  • 输出字符串:toString()

散列表

  • 创建散列函数:hashCode(key)
  • 添加新项:put(key,value)
  • 查值:get(key)
  • 移除:remove(key)
  • 清空:clear()
  • 元素大小:size()
  • 判空:isEmpty()
  • 输出字符串:toString()

解决冲突的几种方式:

  1. 分离链接(拉链法): 重写 put 、get 、remove
  2. 线性探查:重写 put 、get 、remove
  3. 双散列法
  4. 创建更好的散列函数

二叉搜索树

  • 插入新的键:insert(key)
  • 中序遍历:inOrderTraverse()
  • 先序遍历:preOrderTraverse()
  • 后序遍历:postOrderTraverse()
  • 返回树中的最小值/键:min()
  • 返回树中的最大值/键:max()
  • 搜索一个特定的值:search(key)
  • 移除某个键:remove(key)

AVL树

  • 插入新的键:insert(key)
  • 移除某个键:remove(key)

最小堆

  • 插入新的键:insert(value) 进行上移操作
  • 删除最小值:extract() 进行下沉操作
  • 元素大小:size()
  • 判空:isEmpty()
  • 查找堆中的最小值:findMiniNum()

排序

  • 冒泡排序:bubbleSort(array)
  • 选择排序:selectionSort(array)
  • 插入排序:insertionSort(array)
  • 希尔排序:shellSort(array)
  • 归并排序:mergeSort(array)
  • 快速排序:quickSort(array)
  • 堆排序:heapSort(array)
  • 计数排序:countingSort(array)
  • 桶排序:bucketSort(array)
  • 基数排序:radixSort(array)

  • 添加顶点:addVertex(v)
  • 添加边:addEdge(v, w)
  • 返回顶点列表:getVertices()
  • 返回邻接表:getAdjList(v, w)
  • 输出字符串:toString()
  • 广度优先搜索:bfs(graph, startVertex, callback)
  • 深度优先搜索:dfs(graph, callback)