一
环境:JavaScript shell
shell:提供用户使用界面的软件--图形界面shell(windows)
--命令行shell(cmd.exe)
bash是大多数Linux系统的默认shell
JS定义变量时不加var,即使在函数内部定义也为全局变量
JS的函数作用域,JS没有块级作用域
二:数组
三:列表---抽象数据类型(ADT) 元素简单时方便 NodeList并非列表,而是DOM操作取出的集合
clear:delete操作符
四:栈LIFO
底层数据结构是数组
用途①数制转换---先入栈再出栈的算法
②回文---dad,racecar这种
五:队列FIFO
使用数组实现FIFO的数据结构
使用队列对数据进行排序
六:链表
1:JS中的数组很方便但效率低,链表可以在除了需要随机访问时代替一维数组
2:链表有一个特殊的头节点,尾部是一个NULL节点
3:设计基于对象的链表
4:双向链表
5:循环链表
七:字典--键值对应的数据结构
1:定义字典类
JS中的关联数组[字符]----[]中括号的方式使用属性
①object类的keys()方法可返回传入参数中存储的所有键
②for(each)?(...in...)
八:散列--插入,删除,取用数据都很快,但查找效率低下
通过散列函数将键映射为一个数字索引
哈希表就是散列表---数组长度质数且大于100
①选择一个散列函数---键为整型---以数组的长度对键取余(最简单)---除留余数法
---键是字符串类型---①用ASCII码相加再取余---问题①不均匀②散列值相等---碰撞
---②霍纳算法,ASCII码求和时每次乘一个质数(较小如31)
②碰撞处理---①开链法---利用二维数组存放多个数据
---②线性探测法---碰撞时存入下一个位置(直到有空位为止)
当数组大小为待存储数据个数1.5倍时,使用开链法,更大则使用线性探测法
九:集合---无序且独一无二的成员
十:二叉树和二叉查找树---查找,添加,删除均非常高效
树---分层结构---自上而下
二叉树子节点不超过两个,二叉查找树则小的在左边大的在右边
遍历二叉树:中序,先序,后序
十一:图和图的算法
1:图由边的集合以及顶点的集合组成 顶点有权重,称为成本
2:有向图,无向图
3:搜索图:①深度优先②广度优先(按层级向下)
十二:排序算法
基本排序算法
1:冒泡
2:选择
3:插入