数据结构与算法的js描述总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/shuidinaozhongyan/article/details/74453026

1.两种判断结构:if语句和switch语句。
js中的switch语句和其他编程语言的区别:在js中,用来判断的表达式可以是任意类型,而不限于整型。

2.注意参数传递和引用传递

3.204 Not Content 该HTTP响应的意思是仅向客户端发送HTTP报头文件,而不发送HTTP内容体。

4.在es5中,js拥有的是函数作用域。

5.使用对象和面向对象编程。

6.(1)js中的数组是一种特殊的对象,用来表示偏移量的索引是该对象的属性,索引可能是整数,然而,这些数字索引在内部被转换为字符串类型,这是因为js对象中的属性名必须是字符串。数组在js中只是一种特殊的对象,所以效率不如其他语言中的数组高。
(2)和很多编程语言不同,js中数组中的元素不必是同一种数据类型。(3)js中数组也是对象,数组的长度可以任意增长,超出其创建时指定的长度。

7.创建数组的方式,推荐使用[]操作符,与使用Array的构造函数相比,这种方式被认为效率更高。

8.数组常用函数:
查找元素:indexof() lastIndexOf()
数组的字符串表示:join() toString() 当输出数组时,系统自动调用toString()方法
由已有数组创建新数组:concat():不更改原数组;splice():更改原数组
为数组添加元素:push():将一个元素添加到数组末尾;unshift():将元素添加到数组起始位置
从数组中间位置添加和删除元素:splice() 需提供如下参数:起始索引(即你希望开始添加元素的地方);需要删除的元素个数(添加元素时设为0),想要添加进数组的元素。
sort()函数默认使用字典顺序对元素排序
迭代器方法:
(1)不生成新数组的迭代器方法:forEach() every() some():接受一个返回值为布尔类型的参数。 reduce():接受一个函数,返回一个值,不断累加值。
(2) 生成新数组的迭代器方法:map()与forEach()类似,区别是map()返回一个新的数组。 filter()和every()类似,传入返回值为布尔类型的函数,该方法不返回true,
返回一个应用该函数后结果为true的元素的新数组。

9.数据结构之列表
列表的定义:列表是一组有序的数据,列表中的元素可以是任意数据类型。存储元素的数量受到内存的限制。
如果数据存储的顺序不重要,也不必对数据进行查找,则选择列表这种数据结构。
应用场景:影碟租赁

10.栈的应用:进制转化,回文字符串,使用栈实现递归

11.数据结构之队列 应用场景:方块舞的舞伴分配,队列对数据排序,优先队列

12.数据结构之链表 数组的缺点:(1)长度固定,当数组被数据填满时,加入新的元素很困难。(2)添加和删除元素麻烦。但js中的数组不存在上述问题。
js数组的问题是,他们被实现成了对象,与其他语言相比,效率低下。若发现数组在使用时很慢,可考虑用链表代替它。

13.链表的优点:插入一个节点的效率很高;
链表的种类:单向链表和双向链表(节点存在前驱和后继)和循环链表(链表的尾节点指向头结点);许多链表的实现在链表的最前面有一个头结点。
双向链表的适用场景:1.从后往前遍历列表;2.双向链表的remove方法比单向列表高
循环链表的适用场景:当需从后往前遍历链表,但又不想付出额外代价创建双向链表,可使用循环链表。

14.数据结构之字典
字典的适用场景:便利之处在于可对整体进行操作,比如,显示字典中的所有元素。

15.注意:在数组中,当键的类型为字符串时,length属性不起作用。
例如:

var nums = new Array();
nums[0] = 1;
nums[1] = 2;
console.log(nums.length);//2
var pbook = new Array();
pbook['a'] = 1;
pbook['b'] = 1;
console.log(pbook.length);//0

16.从字典中删除键-值对需要使用js中的一个内置函数:delete。该函数是object类的一部分,使用对键的引用作为参数,该函数同时删除键和与其关联的值。
function remove(key) {
delete this.datastore[key];
}

17.数据结构之散列
散列的适用场景:散列使用的数据结构叫做散列表,在散列表上插入、删除和取用数据非常快,但查找操作效率低下。
为了避免碰撞,散列表中数组大小应该是一个质数。
散列化字符串类型的键和散列化整型键
散列表存储数据:对键值散列后,将数据存储在散列表中。
碰撞处理:当散列函数对于多个输入产生同样的输出时,则产生碰撞。
开链法和线性探测法、
开链法的原理:实现散列表的底层数组中,每个数组又是一个新的数据结构,即使两个键散列后的值相同,依然被保存在同样的位置,只是它们在第二个数组中的
位置不一样。在二维数组中,使用链中两个连续的单元格,第一个用来保存键值,第二个用来保存数据。
线性探测法的原理:它属于一种更一般化的散列技术:开放寻址散列。当发生碰撞时,检查散列表中的下一个位置是否为空,如果为空,则存入数据;如果不为
空,则继续检查下一个位置,直到找到一个空的位置为止。基于事实:每个散列表中都有很多空的单元格,可用它们存储数据。
选择哪种碰撞解决办法:如果数组大小是存储数据个数的1.5倍,则使用开链法;如果数组大小是存储数据个数的2倍及2倍以上时,则使用线性探测法。

18.数据结构之集合
集合的重要特性:成员无序和成员不同

19.数据结构之二叉树和二叉查找树
树:是一种非线性的数据结构,以分层方式存储数据。
二叉树的优势:在二叉树上进行查找非常快(而在链表上查找不是这样),为二叉树添加或删除元素也非常快,(对数组添加或删除元素则不是这样)
二叉查找树:它是一种特殊的二叉树,相对较小的值保存在左节点中,较大的值保存在右节点中,该特性使得查找的效率很高。

二叉树生成的算法:每次新插入的元素均与跟元素比较,若比它小,则插入到左边,若左边不为空,则循环查找,知道找到空元素插入。若比根元素大,
与左边相同,找到正确的插入点,则跳出循环。

二叉查找树的中序遍历:按照节点的键值,以升序访问BST上的所有节点。

二叉查找树通常有以下三种类型的查找:
1.查找给定值
2.查找最小值
3.查找最大值
注意:从二叉查找树删除节点最为复杂,其复杂程度取决于删除哪个节点。
二叉查找树的应用场景:计数。

20.数据结构之图和图算法
图的边的表示方法称为邻接表或邻接表数组。
图的两种搜索算法:深度优先搜索和广度优先搜索
查找最短路径:图最常见的操作之一就是寻找从一个顶点到另一个顶点的最短距离。

展开阅读全文

没有更多推荐了,返回首页