用 JavaScript 实现的算法和数据结构
源代码
http://www.gitpp.com/dsboy/javascript-algorithms-cn
数据结构是在计算机中组织和存储数据的特殊方式,以便可以有效地访问和修改数据。更准确地说,数据结构是数据值、它们之间的关系以及可应用于数据的函数或操作的集合。理解这些操作数据的工具,通过学习一门计算机编程语言的实现,理解原理。然后学习其他语言就非常简单了。
初级(B)
链表:链表是一种基本的数据结构,用于存储有序的元素集合。每个元素包含一个指向下一个元素的引用。常见操作包括插入、删除和遍历。
双向链表:与单向链表类似,但每个节点都有两个链接,一个指向前一个节点,另一个指向下一个节点。这使得双向遍历成为可能。
队列:队列是一种先进先出(FIFO)的数据结构。新元素总是添加到队列的末尾,而检索操作总是从队列的开头开始。
堆:堆是一种特殊的树形数据结构,其中父节点的值总是大于或等于(最大堆)或小于或等于(最小堆)其子节点的值。它常用于实现优先队列。
哈希表:哈希表使用哈希函数将键映射到存储位置,以实现快速的插入、删除和查找操作。
优先队列:优先队列是一种数据结构,其中元素根据优先级进行排序。最高优先级的元素总是位于队列的前面。
高级(A)
树:树是一种分层数据结构,模拟了具有根节点、分支和叶子的树状结构。
二叉搜索树:在二叉搜索树中,左子节点的值总是小于其父节点,而右子节点的值总是大于其父节点。
AVL树:AVL树是一种自平衡二叉搜索树,它确保树的任何两个子树的高度差不会超过1。
红黑树:红黑树也是一种自平衡的二叉搜索树,它通过颜色和特定的属性来保持树的平衡。
图:图由节点(顶点)和连接这些节点的边组成。图可以是无向的(边没有方向)或有向的(边有方向)。
不相交集-联合查找数据结构:这是一种用于处理一些不交集的合并及查询问题的数据结构。
布隆过滤器:布隆过滤器是一种空间效率极高的概率数据结构,用于测试一个元素是否属于集合。
LRU缓存:最近最少使用(LRU)缓存策略根据数据的使用时间来决定淘汰哪些数据。最近最少使用的数据会首先被淘汰。
相关算法
搜索算法:如深度优先搜索(DFS)和广度优先搜索(BFS),常用于遍历或搜索树和图。
排序算法:如快速排序、归并排序等,这些算法在处理数组和链表时非常有用。
最短路径算法:如Dijkstra算法和Floyd-Warshall算法,用于在图或网络中找到两点之间的最短路径。
最小生成树算法:如Prim算法和Kruskal算法,用于在加权图中找到一棵包含所有顶点的树,且所有边的权重之和最小。
哈希算法:用于将数据映射到哈希表中的特定位置。
应用场景
链表和双向链表:用于实现高效的插入和删除操作,适用于需要频繁进行这些操作的应用。
队列:常用于任务调度、缓冲处理等场景。
堆和优先队列:常用于实现任务调度器、事件驱动模拟器等。
哈希表:用于实现快速的查找操作,如数据库索引、缓存系统等。
树和图:用于表示复杂的数据结构和关系,如社交网络、地图导航等。
LRU缓存:用于实现高效的缓存替换策略,如网页浏览器缓存、数据库查询缓存等。

用 JavaScript 实现的算法和数据结构
源代码
http://www.gitpp.com/dsboy/javascript-algorithms-cn

