数据结构与算法——JavaScript描
《数据结构与算法——JavaScript描述》笔记!
_wayliu
这个作者很懒,什么都没留下…
展开
-
13 排序算法——计数排序
1.计数排序步骤2.计数排序的基本实现1.计数排序步骤找出乱序数组中最大的元素,建立一个长度为最大元素+1的新数组。统计乱序数组中每个值出现的次数,依次放入新数组中遍历新数组,依次去除新数组中的元素2.计数排序的基本实现// 乱序数组const arr = [9,9,3,3,7,7,4,8,1,8,1,7,8,4,7,2,0,4];function countingSort (arr, max) { // 创建一个新数组,用来统计数组中每个元素出现的次数 let middle原创 2020-10-20 10:28:03 · 292 阅读 · 0 评论 -
12 排序算法——快速排序
1.快速排序步骤2.快速排序递归实现1.快速排序步骤快速排序是对冒泡排序的一种改进。在要排序的数组中找一个基准值。把小于基准值的数据集中到数组的左边(升序排列),把大于基准值的数据集中到数组的右边。递归实现左右数组,返回连接左、基准值、右数组。2.快速排序递归实现const arr = [8,0,4,6,1,2,7,3,5,9]function quickSort (arr) { // 如果数组的长度 <= 1,则不需要排序 if (arr.length <= 1原创 2020-10-20 10:27:42 · 510 阅读 · 1 评论 -
11 排序算法——插入排序
1.插入排序步骤2.直接插入排序1.插入排序步骤获得一个待排序的值 – 目标值;从后之前遍历此元素之前的元素,如果元素大于目标值,将元素后移一个单位;元素小于或等于目标值,将目标值放在此元素之后。2.直接插入排序// 待排序数组const arr = [8,0,4,6,1,2,7,3,5,9];// 直接插入排序function insertSort(arr) { // 传入的数组长度 const len = arr.length; // 由于数组的第一个元素不需要排序原创 2020-10-20 10:27:27 · 141 阅读 · 1 评论 -
10 排序算法——选择排序
1.选择排序思路2.选择排序基本实现1.选择排序思路在乱序数组中找到最小元素(升序),存放到起始位置。重复第一步,直到数组有序。2.选择排序基本实现原创 2020-10-20 10:27:11 · 463 阅读 · 0 评论 -
09 排序算法——冒泡排序
1.冒泡排序基本思路2.冒泡排序的优化13.冒泡排序的优化21.冒泡排序基本思路基本思路是对相邻记录值进行比较,如果符合条件,则将两者进行交换,最终达到有序变化。const arr = [9,0,4,6,1,2,7,3,5,8]function bubbling (arr) { for (let i = 0; i < arr.length; i++) { for (let j = 0; j < arr.length-1; j++) { if (arr[j+1]原创 2020-10-16 18:56:23 · 218 阅读 · 0 评论 -
08 二叉树和二叉查找树
1.树的定义2.二叉树和二叉查找树3.实现二叉查找树4.遍历二叉查找树5.在二叉查找树上进行查找6.从二叉查找树上删除节点1.树的定义2.二叉树和二叉查找树二叉树每个节点的子节点不超过两个。两个子节点分别称为左节点和右节点。二叉查找树确定子节点非常重要。二叉查找树是一种 特殊的二叉树,相对较小的值保存在左节点中,较大的值保存在右节点中。这一特性使得 查找的效率很高,对于数值型和非数值型的数据,比如单词和字符串,都是如此。3.实现二叉查找树节点class Node {原创 2020-10-16 14:31:08 · 262 阅读 · 0 评论 -
07集合(set)
1.集合概述2.集合类的实现3.集合的更多操作1.集合概述集合的成员是无序的集合的成员是唯一的集合实现基于数组es6中已经有了set集合2.集合类的实现function Set () { this.dataStore = [] this.add = add this.remove = remove this.show = show function add (data) { if (this.dataStore.indexOf(data) < 0原创 2020-10-15 19:49:37 · 76 阅读 · 0 评论 -
06 字典
1.字典概述2.Dictionary 类3.Dictionary 类的辅助方法1.字典概述一种以 键-值 对存在的数据结构,JavaScript的 Object 就是以字典形式设计的。可以用数组和对象实现,可以自定义Dictionary类实现。2.Dictionary类function Dictionary () { this.datastore = new Array() this.add = add this.find = find this.remove = remo原创 2020-10-15 16:51:30 · 76 阅读 · 0 评论 -
05 链表
1.数组的缺点2.定义链表3.设计一个基于对象的链表4.双向链表5.循环链表1.数组的缺点其他语言数组的缺点JavaScript数组的缺点其他语言数组的缺点数组长度固定添加和删除元素需要将数组中的其他元素向前或向后平移,以反映数组刚刚进行了添加或删除操作。JavaScript中由于有splice()函数,不存在这些问题。JavaScript数组的缺点JavaScript的主要问题是被实现成了对象,与其他语言数组相比效率很低。除了数据的随机访问,链表几乎可以用在任何可以使原创 2020-10-15 13:27:16 · 133 阅读 · 0 评论 -
04 队列
1.对队列的操作2.一个用数组实现的队列3.使用队列:方块舞的舞伴分配问题1.对队列的操作队列是一种列表,不同的是只能在队尾插入元素,队首删除元素。(先进先出)入队 enqueue【即数组push()】出队 dequeue【即数组shift()】读取对头元素 peek()2.一个用数组实现的队列function Queue () { this.dataStore = [] this.enqueue = enqueue this.dequeue = dequeue thi原创 2020-10-14 16:37:03 · 161 阅读 · 0 评论 -
03 栈
1.对栈的操作2.栈的实现3.数制间相互转换4.回文5.使用栈模拟递归过程6.练习题1.对栈的操作栈是一种后入先出的数据结构。push()入栈pop()出栈peek()返回栈顶元素clear()清除栈内所有元素length 记录栈内元素个数2.栈的实现function Stack () { this.dataStore = [] this.top = 0 this.push = push this.pop = pop this.peek = peek原创 2020-10-14 13:22:27 · 109 阅读 · 0 评论 -
02 列表
1.列表的抽象数据类型定义2.实现列表类1.列表的抽象数据类型定义场景列表的抽象数据类型定义1.场景当不需要在一个很 长的序列中查找元素,或者对其进行排序时,列表显得尤为有用。反之,如果数据结构非 常复杂,列表的作用就没有那么大了。(如购物清单就是一个列表)2.列表的抽象数据类型定义列表是一组有序的数据,每个列表中的数据称为元素。在JavaScript中元素可以是任意数据类型,长度没有事先限定。2.实现列表类const { clear } = require("console原创 2020-10-14 09:40:29 · 54 阅读 · 0 评论 -
01 数组
1. JavaScript 中对数组的定义2. JavaScript 中对数组的创建3. 由字符串生成数组(split)4. 对数组的整体性操作(深浅拷贝)5.存取数组(查找元素)(indexof()、es6的 find()、findIndex())6.存取数组(数组的字符串表示)(join()、toString())7.存取数组(由已有数组创建新数组)(concat()、splice()、es6数组扩展运算)1. JavaScript 中对数组的定义标准定义:一个存储元素的线性集合(有序原创 2020-10-13 14:19:22 · 659 阅读 · 0 评论