①,数组 (线性表【数组】存储一些列同类型的值,JavaScript中是数组是特殊的可以保存不同类型【貌似javascript中的数组也是特殊的对象】)
②,栈 (先进后出的线性表【数组】)
③,队列 (先进先出的线性表【数组】)
④,链表 (非顺序的存储结构,通过指针链接首尾)
⑤,哈希表 (也叫【散列表】,是通过key和value组成的无序的一组集合)
⑥,树 (是一个有根节点【root】和n个子节点组成的数据结构)
⑦,堆 (是一个特殊的树结构)
⑧,图 (是由顶点和边组成的数据结构)
二,数据结构详解
1. 数组
数组是可以再内存中连续存储多个元素的结构,在内存中的分配也是连续的如下图:
var arr = [1,'2',{},[]]
注意:在js中可以保存不通的数据类型和自动扩容
优点:1.按照索引查元素快,2.按照索引遍历数组方便,因为数组在内存中存储是连续的
缺点:1.添加,删除的操作慢,因为要移动其他元素,2.数组的大小无法扩容(javascript不存在),3.数组只能存储一种数据类型(javascript不存在)
适用场景:频繁查询,很少删除,增加(尾部删除,增加例外,删除数组中间部位会移动元素的,造成大量内存堆积操作)
2.栈
栈是一种特殊的线性表,栈是遵从先进后出的原则的线性表【线性表:可以理解为数组】如下图:
栈就像是叠盘子一样,先放进的在最底下,拿出来的时候拿最上面的
适用场景:遵循先进后出的原则的场景,如:进制转换,递归
3.队列
队列也是一种特殊的线性表,遵从先进先出,和栈相似切原则相反,只能头出,尾进
双端队列,就是头尾都能出的队列
适用场景:遵循先进先出的原则的场景,如:在多线程阻塞队列管理中非常适用
4.链表
链表是非顺序的存储结构,通过指针链接首尾的数据结构
优点:链表是可以任意加减元素的,因为链表加减元素,只需要改变指针的指向
缺点:查找和遍历链表 非常耗时,因为需要通过指针,循环查找
适用场景:数据量较小,需要频繁增加,删除的操作场景
5.哈希表
散列表,也叫哈希表,是根据关键码和值 (key和value) 直接进行访问的数据结构,通过key和value来映射到集合中的一个位置,这样就可以很快找到集合中的对应元素
6.树
是一个有根节点【root】和n个子节点组成的数据结构
7.堆
堆是一个特殊的树结构,可以看做一棵树的数组对象
8.图
图是由顶点和边组成的数据结构