数据结构与算法JavaScript描述

环境: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:插入

cncncn
原文地址:https://www.cnblogs.com/cndotabestdota/p/5290942.html