
数据结构与算法
文章平均质量分 59
主要是数据结构与算法的笔记积累和一些问题
codecat0710
分享笔记和问题积累
展开
-
JavaScript 数组扁平化(实现)
文章目录1. 递归和concat实现2. reduce和concat实现3. some和concat和扩展运算符实现4. split和toString实现5. flat实现6. 正则和JSON实现7. 只使用递归实现1. 递归和concat实现// 准备数据,下面的实现方式都是使用这条数据let arr = [1, [2, [3, [4, [5, [6, [7, [8, [9]]]]]]]]]function flat(arr) { let result = [] for (let i =原创 2022-03-14 17:22:25 · 1767 阅读 · 0 评论 -
排序算法,简单排序、高级排序(实现)
文章目录1. 大O表示法2. 排序算法的总类3. 冒泡排序实现4. 选择排序实现5. 插入排序实现6. 希尔排序实现7. 快速排序实现1. 大O表示法符号名称O(1)常数的O(log(n))对数的O(n)线性的O(n * log(n))线性和对数的乘积O(n ^ 2)平方O(2 ^ n)指数的(非常大)在计算机中,大O表示法的度量是粗略的,只保留最高项,比如:n ^ 2 + 2n + 18 --> 大O表示法为 n ^ 2原创 2022-01-22 18:56:30 · 1211 阅读 · 0 评论 -
数据结构,图结构(笔记)
1. 什么是图?图结构是一种与树结构相似的数据结构图论是数学的一个分支,并且在数学的概念上,树也是图的一种他以图为研究对象,研究的顶点和边组成的图形主要研究事物之间的关系,顶点代表事物,边代表两个事物之间的关系2. 图的应用场景我们要知道树结构有很多应用场景,比如公司的架构、家族的关系等图结构的话,有人与人之间的关系网,人就代表顶点,人与人之间的关系就代表边科学家们在观察人与人之间关系网的时候,还发现了六度空间理论3. 六度空间理论你和任何一个陌生人之间所间隔的人不会超过六个原创 2022-01-17 09:13:52 · 1463 阅读 · 0 评论 -
数据结构,字典(笔记)
1. 字典字典的主要特点是一一对应的关系,key: value,可以通过key去获取value字典中的key是不可以重复的,而value可以重复,而且字典中的key是无序的(这点和集合相似)字典类似ES6中的Map,还是有区别的1.1 字典的封装// 字典类class Dictionay { constructor() { this.items = {} } // 1.set(key, value):在字典中添加键值对 set(key, value) { t原创 2022-01-16 14:37:06 · 688 阅读 · 0 评论 -
树结构,红黑树,图片案例(笔记)
1. 红黑树1.1 红黑树的规则红黑树符合二叉搜索树的规则,并且自己也有一些规则节点只能是红色或黑色根节点是黑色每个节点中,它儿子属性为null的都为NIL节点(比如left=null,那么左子节点就为NIL节点)每个红色节点的两个子节点都是黑色(从根到每个叶子上的路径,不能有两个连续的红色节点)任意一个节点,到它不同叶节点的路径上,黑色节点的数目都是相同的1.2 红黑树的相对平衡有了红黑树规则的约束,确保了红黑树的关键特征从根到叶子节点的最长路径,不会超过最短路径的二倍长原创 2022-01-15 09:50:50 · 684 阅读 · 0 评论 -
树结构,二叉搜索树(笔记)
1. 树结构与其他数据结构的优缺点数组优点:数组在查询和修改某个值时效率比较高,因为是根据下标直接查找如果是通过数据来寻找对应的位置,查找效率为O(N)这样的效率很低,也可以先给数组进行排序,在进行二分法查找效率为O(logN),但是给数组排序也要对应的时间缺点:数组在进行插入和删除操作时,效率会很低,因为数组前面的数据增加或减少时,数组后面的每一项数据的下标都要改变链表优点:链表在进行插入和删除操作时要比数组效率高很多,因为只需要当前数据和前面后面的数据断开引用或原创 2022-01-14 09:19:42 · 1005 阅读 · 0 评论 -
数据结构,哈希表(笔记)
1. 哈希表 为什么会有哈希表?举个栗子:一个公司里有上千个员工,我想找一个员工的信息一般通过什么方式通过数组,每一个员工对应一个工号,我可以直接查找工号就可以获取对应的信息但是我不想通过工号去获取,我想通过员工的名字去获取,这个时候就会想到链表,但是问题来了,链表是一个信息连着一个信息去查找,效率非常的慢这个时候就可以用到哈希表了,可以把每个员工的名字转成对应的数字,数字对应名字,这样我直接通过数字就可以获取员工的信息了1.1 哈希化 将大数字转化为数组范围内的下标(这里的范围自己原创 2022-01-11 08:58:40 · 1330 阅读 · 1 评论 -
数据结构,集合(笔记)
1. 集合集合通常是由一组无序的,不能重复的元素构成集合是一种特殊的数组特殊之处在与里面的元素没有顺序,也不能重复没有顺序就代表不能通过下标去获取值,不能重复表示在一个集合中相同的数据只会存在一分在ES6中的Set就是一个集合1.1 集合的封装// 集合类class Set { constructor() { this.obj = {} // 集合的长度 this.size = 0 } // 1.add(value):向集合添加一个新的项原创 2022-01-10 09:10:01 · 624 阅读 · 0 评论 -
线性结构,链表、双向链表(笔记)
1. 链表要存储多个元素,另一个选择就是链表,和数组很相似一般强类型语言对数组的长度有限制(比如TS中的元组),而链表没有链表中的每个数据,都有当前数据本身和指向下一个元素的引用链表在插入和删除数据时,只需要对当前数据和指向进行修改,性能要比数组高很多数组是下标对应数据,链表是数据本身和指向下一条数据所以在频繁查找数据时建议使用数组,频繁插入和删除数据时建议使用链表1.1 链表的封装// 内部类,存储当前数据和指向下一个数据的引用class Node { constructor(原创 2022-01-09 10:26:41 · 708 阅读 · 0 评论 -
线性结构,队列、优先级队列(笔记)
1. 队列队列结构是什么,队列结构是一种受限制的线性结构队列的特征,先进先出、后进后出(FIFO – first in first out)队列只能在表的前端进行删除,表的后端进行添加1.1 队列的封装// 队列类class Queue { constructor() { this.arr = [] } // 1.enqueue(Ele):向队列的尾部添加数据 enqueue(Ele) { this.arr.push(Ele) } // 2.de原创 2022-01-08 09:44:02 · 661 阅读 · 0 评论 -
线性结构,栈[堆栈](笔记)
1. 栈(堆栈)栈结构是什么,栈结构是一种受限制的线性结构栈的特征,先进后出、后进先出(LIFO – last in first out)栈只能在一端进行添加和删除,这一端被称为栈顶,另一端称为栈底。向栈顶添加数据称为进栈、入栈或压栈,删除数据又称为出栈或退栈1.1 栈的封装// 栈类class Stack { constructor() { this.arr = [] } // 1.push(Ele):添加一个新元素到栈顶位置 push(Ele) { t原创 2022-01-07 09:37:07 · 651 阅读 · 0 评论 -
认识数据结构与算法(笔记)
文章目录1. 什么是数据结构2. 什么是算法(Algorithm)3. 线性结构4. 哈希表5. 树结构6. 图结构7. 排序搜索1. 什么是数据结构数据结构就是在计算机中,存储和组织数据的方式。通常情况下,精心选择的数据结构可以带来最优效率的算法。这就好比一个庞大的图书馆中存放了大量的书籍,我们不仅仅要把书放进去,还应该在合适的时候能够取出来2. 什么是算法(Algorithm)Algorithm这个单词本意就是解决问题的方法/步骤逻辑数据结构的实现离不开算法3. 线性结构数原创 2022-01-06 17:57:18 · 902 阅读 · 0 评论