标签:数据结构

JavaScript Memoization缓存技术

Memoization是一种用来优化计算程序使之更快的技术,通过储存调用函数的结果并在传进同样参数的时候直接返回其返回值来实现。 而通常,我们只在递归函数中才需要反复调用一个已经执行过的函数的返回值。所以这里以一个最基本的计算阶乘的递归函数为例,如下所示 let times = 0; functio […]

JavaScript数据结构与算法(六)——集合

集合(set)是一种包含不同元素的数据结构。集合中的元素称为成员。 JavaScript中的集合与数学中的集合在很多地方上是相似的,例如,他们都拥有如下特性: 集合中的成员是无序的(无序性) 集合中不允许相同成员存在(互异性) 基本定义 与数学中的集合类似,他们都可以分为如下几类: 空集:不包含任何 […]

JavaScript数据结构与算法——链表

什么是链表 链表是一种非连续、非顺序的数据结构。数据结构的逻辑顺序是通过每个元素的指针指向下一个节点来实现的。对于很多数组是固定长度的编程语言来说,链表具有插入或删除更加快速的特点,而在JavaScript中,虽然不存在上述问题,但数组被实现成了对象,这样它的效率也会低很多 定义一个链表 链接是一组 […]

JavaScript数据结构与算法——队列

之前说到栈是一种特殊的线性表,队列也是一种列表,与栈不同的是队列是一种FIFO((First-In-First-Out,先进先出)的数据结构,而栈与之相反。 队列分为两端——队尾和对首,队列从队尾插入元素,从队首删除元素,可以理解成现实生活中的先到先得的道理,好似排队一样,后到的人只能排在队尾。 队 […]

JavaScript数据结构与算法——什么是栈

之前说到数组操作的时候有提到push()方法和pop()方法,他们分别可以往一个数组最后推送一个元素或者移除一个元素。而这两个方法其实就是对栈操作的两种主要操作 栈是一种常见的线性数据结构,栈内的元素只能从一端访问,如下图所示,进栈和出栈都是从一端进行,这一端叫做栈顶。 因为栈结构只有一端能访问,所 […]

数组和链表的区别

数组是将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素。但是如果要在数组中增加一个元素,需要移动大量元素,在内存中空出一个元素的空间,然后将要增加的元素放在其中。同样的道理,如果想删除一个元素,同样需要移动大量元素去填掉被移动的元素。如果应用需要快速访问数据,很少 […]