数据结构与算法
文章平均质量分 72
记录数据结构与算法相关知识笔记
凯小默
专注前端领域开发。
展开
-
53 # 层序遍历跟反转二叉树
从上到下,从左到右依次访问每一个节点。原创 2023-07-11 23:32:19 · 261 阅读 · 0 评论 -
52 # 二叉树的前中后遍历
先访问根节点,前序遍历左子树,前序遍历右子树;遍历 dom 树可以使用。:后序遍历左子树,后续遍历右子树,根节点;遍历子节点可使用后序遍历。遍历树的目的一般是修改树,比如修改树的节点,采用访问者模式。:中序遍历左子树,根节点,中序遍历右子树;线性数据结构遍历比较简单,可以采用正序遍历、逆序遍历。:从上到下,从左到右依次访问每一个节点。原创 2023-07-11 16:13:43 · 241 阅读 · 0 评论 -
51 # 二叉搜索树的实现
由于我们判断的时候用了覆盖,可以看到。原创 2023-07-07 19:14:16 · 305 阅读 · 0 评论 -
50 # 树的概念
一般情况下存储数据我们可以采用数组的方式,但是从数组中检索数据的时间复杂度是O(n),如果数据存储有序,则可以采用二分查找的方式来检索数据,复杂度为O(logn),但是如果操作数组中的数据像增加、删除默认数组会产生塌陷,时间复杂度为O(n)。二叉搜索树也称为二叉查找树或二叉排序树,在二叉搜索树中查询、增加、删除复杂度最坏为O(logn),特性是当它的左子树不空,则左子树上所有节点的值均小于它的根节点的值,当右子树不空,则右子树所有节点的值均大于它的根节点的值。原创 2023-07-06 20:46:15 · 180 阅读 · 0 评论 -
49 # 用递归和非递归两种方式实现链表反转
思路就是从后面两两开始反转,比如下面的就是先 B、C 反转再 A、B 反转。思路就是利用一个循环从链表中一个一个取出来放到新的链表中。用代码表示执行一个元素的效果。原创 2023-07-05 10:57:08 · 130 阅读 · 0 评论 -
48 # 单向链表
上一节讲了可读流,在讲可写流之前得了解一下链表。比如:并发往文件中写入数据每次写都会开个线程,上面的写入可能出现123321213node 中主线程是单线程,没有锁的概念。怎么解决这种问题?原创 2023-07-04 15:53:52 · 232 阅读 · 0 评论 -
【基础篇】9 # 排序:冒泡排序(Bubble Sort)、插入排序(Insertion Sort)、选择排序(Selection Sort)
总的来说,冒泡排序的数据交换要比插入排序的数据移动要复杂,相对于冒泡排序和插入排序,选择排序不稳定,就稍微逊色一点。空间复杂度是否原地排序是否稳定最好时间复杂度最坏时间复杂度平均时间复杂度冒泡排序O(1)✔️✔️O(n)O(n2n^2n2O(n2n^2n2插入排序O(1)✔️✔️O(n)O(n2n^2n2O(n2n^2n2选择排序O(1)✔️❌O(n2n^2n2O(n2n^2n2O(n2n^2n2。原创 2023-02-24 17:26:21 · 578 阅读 · 0 评论 -
推荐算法学习网址:【数据结构和算法动态可视化】
VisuAlgo 于 2011 年由 Steven Halim 博士创建,是一个允许学生以自己的速度自学基础知识,从而更好地学习数据结构与算法的工具。点击 Bubble Sort,然后自己创建数组,执行,就能看到冒泡排序的动画过程。原创 2023-02-23 10:28:30 · 154 阅读 · 0 评论 -
【基础篇】8 # 递归:如何避免出现堆栈溢出呢?
递归是一种应用非常广泛的算法(或者编程技巧),比如 DFS 深度优先搜索、前中后序二叉树遍历等等都是用到了递归。方法或函数调用自身的方式称为递归调用,调用称为递,返回称为归。f(1) = 1;// n 是大于 1 的正整数。原创 2023-02-21 15:17:49 · 1636 阅读 · 0 评论 -
【基础篇】7 # 队列:队列在线程池等有限资源池中的应用
入队 enqueue(),放一个数据到队列尾部;出队 dequeue(),从队列头部取一个元素。原创 2023-02-14 18:53:30 · 457 阅读 · 0 评论 -
【基础篇】6 # 栈:如何实现浏览器的前进和后退功能?
栈是一种“操作受限”的线性表,只允许在一端插入和删除数据,其特性就是后进先出、先进后出。栈既可以用数组来实现,也可以用链表来实现。用数组实现的栈叫作顺序栈用链表实现的栈叫作链式栈。原创 2023-02-02 19:42:16 · 985 阅读 · 0 评论 -
【基础篇】5 # 链表(下):写好链表代码的六个实用技巧
技巧一:理解指针或引用的含义 指针或引用都是存储所指对象的内存地址。将某个变量赋值给指针,实际上就是将这个变量的地址赋值给指针。原创 2023-01-31 16:44:31 · 389 阅读 · 0 评论 -
【基础篇】4 # 链表(上):如何实现LRU缓存淘汰算法?
数组简单易用,在实现上使用连续的内存空间,可以借助CPU的缓冲机制预读数组中的数据,所以访问效率更高,而链表在内存中并不是连续存储,所以对CPU缓存不友好,没办法预读。因为链表中的数据并非连续存储的,所以无法像数组那样,根据首地址和下标,通过寻址公式就能直接计算出对应的内存地址,而是需要根据指针一个结点一个结点地依次遍历,直到找到相应的结点。不管是单链表还是双向链表,为了查找到值等于给定值的结点,都需要从头结点开始一个一个依次遍历对比,直到找到值等于给定值的结点,然后再通过指针操作将其删除。原创 2023-01-16 12:00:04 · 864 阅读 · 0 评论 -
【基础篇】3 # 数组:为什么很多编程语言中数组都从0开始编号?
数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。原创 2023-01-15 17:55:18 · 689 阅读 · 0 评论 -
【入门篇】2 # 复杂度分析(下):浅析最好、最坏、平均、均摊时间复杂度
函数来说,O(1) 时间复杂度的插入和 O(n) 时间复杂度的插入,出现的频率是非常有规律的,数组已经满了,也就是 O(n) 是无空闲的状态,每满一次就会清空数组,清空数组后重新开始写 n - 1 次才会进行下一次清空,每次写入的复杂度就是O(1),有 O(n) 后接着 n - 1 个 O(1),循环往复。所以把耗时多的那次操作均摊到接下来的 n-1 次耗时少的操作上,均摊下来,这一组连续的操作的均摊时间复杂度就是 O(1),可以理解为 (n + n - 1)/n。,推出平均时间复杂度为 O(n)。原创 2023-01-12 21:17:06 · 763 阅读 · 0 评论 -
【指南篇】0 # 数据结构与算法知识点难易重点程度表
【数据结构与算法之美】专栏学习笔记。原创 2023-01-12 18:31:16 · 1252 阅读 · 0 评论 -
【入门篇】1 # 复杂度分析(上):如何分析、统计算法的执行效率和资源消耗?
复杂度也叫渐进复杂度,包括时间复杂度和空间复杂度,用来分析算法执行效率与数据规模之间的增长关系,可以粗略地表示,越高阶复杂度的算法,执行效率越低。常见的复杂度从低阶到高阶有:O(1)、O(logn)、O(n)、O(nlogn)、O(n2n^2n2。原创 2023-01-11 16:55:03 · 417 阅读 · 0 评论 -
leetcode#1:两数之和
描述Category:algorithmsDifficulty:EasyTags:array | hash-tableCompanies:adobe | airbnb | amazon | apple | bloomberg | dropbox | facebook | linkedin | microsoft | uber | yahoo | yelp题目给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种原创 2020-07-16 22:32:19 · 199 阅读 · 0 评论