数据结构与算法JavaScript描述
Michael McMillan著
人民邮电出版社
数组
定义:
一个存储元素的线性集合,元素可以通过索引来任意存取,索引通常是数字,用来计算元素之间存储位置的偏移量。 JavaScript原生的数据类型,(列表/栈/队列都可以基于数组实现)
工作原理:
使用场合:
创建数组:
let a=[];
let b=new Array(10);
方法:
- indexOf():查找
- lastIndexOf():
- join()
- toString()
- concat()
- splice(start,length,[insert])
- push()/pop()
- unshift()/shift()
- reverse()
- sort(comparefunction)
- every()
- some()
- reduce()
- map()
- filter()
列表
定义:
一组有序的数据;是一种抽象的数据类型;
工作原理:
使用场合:
对于查找的要求不高
创建:
基于数组,自定义类来实现
方法
栈
定义
数据只能在栈顶操作,后入先出的一种抽象数据结构;
栈的抽象数据类型(ADT)定义
| 名称 | 说明 |
|---|---|
dataStore:数组 | 保存栈内元素 |
| top:私有属性 | 记录栈顶位置 |
length:function | 长度 |
push:function | 入栈 |
pop:function | 出栈 |
peek:function | 预览栈顶 |
clear:function | 清空 |
工作原理:
使用场合:
-
将数组n转换成为b(b是2~9的数字)为技术的数字;
function mulBase(num,base){ var s=new Stack(); do{ s.push(num%base); num=Math.floor(num/=base); } while(num>0); var converted=''; while(s.length()>0){ converted+=s.pop() } return converted }
- 回文判断
- 递归
创建:
基于数组,自定义类实现
方法:
- push():入栈
- pop():出栈
- peek():预览栈顶
队列
定义
队尾插入,队首删除的先进先出的列表
队列的抽象数据类型(ADT)定义
| 名称 | 说明 |
|---|---|
dataStore:数组 | 保存队列内元 |
length:function | 长度 |
enqueue:function | 入队 |
dequeue:function | 出队 |
front:function | 预览队首 |
back:function | 预览队尾 |
toString:function | 显示队列内的所有元素 |
empty:function | 判空 |
工作原理:
使用场合:
- 模拟现实排队
- 数据排序
- 优先队列:优先级高的先走,相同优先级按照先进先出的顺序走;
- 双向队列:队尾和队首可以双向添加和删除
创建:
基于数组,自定义类实现
方法:
- enqueue()
- dequeue()
- empty()
- toString()
链表
定义
链表是由一组节点(Node) 组成的集合;每个节点都使用**链(链:一个对象的引用)指向它的后继;
节点的抽象数据类型定义
| 名称 | 说明 |
|---|---|
element:对象 | 元素 |
next | 链 |
链表的抽象数据类型定义
| 名称 | 说明 |
|---|---|
head:Node | 头节点 |
find:function | 查找 |
insert:function | 插入 |
remove:function | 移除 |
display:function | 展示链表的所有节点 |
工作原理:
使用场合:
JS的数组效率很低,如果发现数组在实际中使用很慢,就可以考虑用链表替代;除了数据的随机访问,链表几乎可以用在任何可以使用一维数组的情况中。如果需要随机访问,数组最优;
- 适合插入和删除多个元素时,更高效
- 不适合查找和随机访问
- 双向链表的Node类需要多加一个previous,双向链表比单向的支持更快的从后往前找
- 循环链表:链表的尾结点指向头结点
创建:
方法:
字典
定义
工作原理:
使用场合:
创建:
方法:
散列
定义
工作原理:
使用场合:
创建:
方法:
集合
定义
工作原理:
使用场合:
- 不允许有重复元素出现的场景
创建:
方法:
二叉树和二叉查找树
定义
工作原理:
使用场合:
- 适合存储有序的元素
创建:
方法:
图和图算法
定义
工作原理:
使用场合:
创建:
方法:
排序算法
处理大数据