优先队列
JavaScript 数据结构与算法(五)优先队列场景生活中类似优先队列的场景:
优先排队的人,优先处理。 (买票、结账、WC)。
排队中,有紧急情况(特殊情况)的人可优先处理。
优先队列优先级队列主要考虑的问题:
每个元素不再只是一个数据,还包含优先级。
在添加元素过程中,根据优先级放入到正确位置。
优先队列的实现代码实现12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879// 优先队列内部的元素类class QueueElement { constructor(element, priority) { this.element = element; this.priority = priority; }}// 优先队列类(继承 Queue 类)export class Prio ...
队列
JavaScript 数据结构与算法(四)队列认识队列队列(Queue)是一种运算受限的线性表,特点:先进先出。(FIFO:First In First Out)
受限之处:
只允许在表的前端(front)进行删除操作。
只允许在表的后端(rear)进行插入操作。
生活中类似队列结构的场景:
排队,比如在电影院,商场,甚至是厕所排队。
优先排队的人,优先处理。 (买票、结账、WC)。
队列图解
队列在程序中的应用
打印队列:计算机打印多个文件的时候,需要排队打印。
线程队列:当开启多线程时,当新开启的线程所需的资源不足时就先放入线程队列,等待 CPU 处理。
队列的实现队列的实现和栈一样,有两种方案:
基于数组实现。
基于链表实现。
队列常见的操作
enqueue(element) 向队列尾部添加一个(或多个)新的项。
dequeue() 移除队列的第一(即排在队列最前面的)项,并返回被移除的元素。
front() 返回队列中的第一个元素——最先被添加,也将是最先被移除的元素。队列不做任何变动(不移除元素,只返回元素信息与 Map 类的 peek 方法非常类似)。
is ...
栈
JavaScript 数据结构与算法(三)栈数组是一个线性结构,并且可以在数组的任意位置插入和删除元素。但是有时候,我们为了实现某些功能,必须对这种任意性加以限制。栈和队列就是比较常见的受限的线性结构。
什么是栈栈(stack)是一种运算受限的线性表:
LIFO(last in first out)表示就是后进入的元素,第一个弹出栈空间。类似于自动餐托盘,最后放上的托盘,往往先被拿出去使用。
其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。
向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;
从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
如下图所示:
栈的特点:先进后出,后进先出。
程序中的栈结构
函数调用栈:A(B(C(D()))):即 A 函数中调用 B,B 调用 C,C 调用 D;在 A 执行的过程中会将 A 压入栈,随后 B 执行时 B 也被压入栈,函数 C 和 D 执行时也会被压入栈。所以当前栈的顺序为:A->B->C->D( ...
数组
JavaScript 数据结构与算法(二)数组几乎所有的编程语言都原生支持数组类型,因为数组是最简单的内存数据结构。数组通常情况下用于存储一系列同一种数据类型的值。但在 JavaScript 里,数组中可以保存不同类型的值。但我们还是要遵守最佳实践,别这么做(大多数语言都没这个能力)。
创建和初始化数组
new Array()
123456789const daysOfWeek = new Array( "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday");
[]
123456789const daysOfWeek = [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday&qu ...
前言
JavaScript 数据结构与算法(一)前言什么是数据结构?数据结构的定义
官方定义
无
民间定义
“数据结构是数据对象,以及存在于该对象的实例和组成实例的数据元素之间的各种联系。这些联系可以通过定义相关的函数来给出。” — 《数据结构、算法与应用》
“数据结构是 ADT(抽象数据类型 Abstract Data Type)的物理实现。” — 《数据结构与算法分析》
“数据结构(data structure)是计算机中存储、组织数据的方式。通常情况下,精心选择的数据结构可以带来最优效率的算法。” —中文维基百科
从自己角度认识
在计算机中,存储和组织数据的方式。
数据结构在生活中应用我们知道,计算机中数据量非常庞大,如何以高效的方式组织和存储呢?
例如:一个庞大的图书馆中存放了大量的书籍,我们不仅仅要把书放进入,还应该在合适的时候能够取出来。
图书摆放要使得两个相关操作方便实现:
操作 1:新书怎么插入?
操作 2:怎么找到某本指定的书?
图书各种摆放方式:
方法 1:随便放
操作 1:哪里有空位放哪里。
操作 2:找某本书,累死。
方法 2:按照书名的拼音字 ...
图
JavaScript 数据结构与算法(十四)图图的概念在计算机程序设计中,图也是一种非常常见的数据结构,图论其实是一个非常大的话题,在数学上起源于哥尼斯堡七桥问题。
什么是图?
图是一种与树有些相似的数据结构。
实际上,在数学的概念上,树是图的一种。
我们知道树可以用来模拟很多现实的数据结构,比如:家谱/公司组织架构等等。
那么图长什么样子呢?或者什么样的数据使用图来模拟更合适呢?
人与人之间的关系网
互联网中的网络关系
广州地铁图
那么,什么是图呢?
我们会发现,上面的结点(其实图中叫顶点 Vertex)之间的关系,是不能使用树来表示(几叉树都不可以)。
这个时候,我们就可以使用图来模拟它们。
图通常有什么特点呢?
一组顶点:通常用 V (Vertex) 表示顶点的集合
一组边:通常用 E (Edge) 表示边的集合
边是顶点和顶点之间的连线
边可以是有向的,也可以是无向的。(比如 A — B,通常表示无向。 A –> B,通常表示有向)
图的术语术语
我们在学习树的时候,树有很多的其他术语,了解这些术语有助于我们更深层次的理解图。
...