目录前言:二叉树遍历方式:手撕前中后序遍历(递归)的三大准备深度优先搜索: 手撕前中后遍历(递归):手撕前中后序遍历(迭代):深度优先搜索:总结:前言: 今天我们将带领大家手撕二叉树的遍历,本篇会分别讲解深度优先搜索法和广度优先有搜索法下的各自详细算法,大家做好准备了嘛?二叉树遍历方式:深度优先遍历广度优先遍历手撕前中后序遍历(递归)的三大准备确定递归函数的参数和返回值。确定终止条件。确定单层递归的逻辑。深度优先搜索: 手撕前中后遍历(递归): 讲深度优先搜索遍历,实际上就是在讲前中后序遍历的方法,我们先用前序遍历进行讲解。 1.确定递归函数的参数和返回值:我们就只传递一个
前言: 本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析、代码及波形,所有代码均经过本人验证。目录如下:1.数字IC手撕代码-分频器(任意偶数分频)2.数字IC手撕代码-分频器(任意奇数分频)3.数字IC手撕代码-分频器(任意小数分频)4.数字IC手撕代码-异步复位同步释放5.数字IC手撕代码-边沿检测(上升沿、下降沿、双边沿)6.数字IC手撕代码-序列检测(状态机写法)7.数字IC手撕代码-序列检测(移位寄存器写法)8.数字IC手撕代码-半加器、全加器9.数字IC手撕代码-串转并、并转串10.数字IC手撕代码-数据位宽转换器(宽-窄,窄-宽转换
文章目录一、红黑树概念介绍二、红黑树模拟实现(1)红黑树节点(2)红黑树插入分析(核心)(3)插入代码思路(如何快速写插入算法)(4)判断平衡函数(5)查找函数(6)测试函数(7)测试结果三、红黑树源代码(1)RbTree.h(2)Test.cpp一、红黑树概念介绍概念:红黑树,也是一种二叉搜索树,它是在每个结点上增加一个存储位表示结点的颜色,可以是红或黑,然后通过对任何一条从根到叶子的路径上各个结点着色方式的限制,保证了没有一条路径会能超过其他路径的俩倍,因而是近似平衡的。map和set的底层数据结构就是用红黑树来封装的。性质:1.根节点是黑色的2.不能出现连续的红色节点3.每条路径上有相同
✨个人主页:北海🎉所属专栏:C++修行之路🎃操作环境:VisualStudio2019版本16.11.17文章目录🌇前言🏙️正文1、认识红黑树1.1、红黑树的定义1.2、红黑树的性质1.3、红黑树的特点2、红黑树的插入操作2.1、抽象图2.2、插入流程2.3、单纯染色2.4、左单旋+染色2.5、右左双旋+染色2.6、具体实现代码2.6、注意事项及调试技巧3、AVL树VS红黑树3.1、红黑树的检验3.2、性能对比🌆总结🌇前言红黑树是平衡二叉搜索树中的一种,红黑树性能优异,广泛用于实践中,比如Linux内核中的CFS调度器就用到了红黑树,由此可见红黑树的重要性。红黑树在实现时仅仅依靠红与黑两种颜色
文章目录迪杰斯特拉(Dijkstra)算法1.算法思想及其步骤2.代码2.1相关声明2.2有权图的建立函数定义2.3核心算法:迪杰斯特拉迪杰斯特拉(Dijkstra)算法引言:我们常常纠结一个对路径选择的决策问题,假设我们要从北京到上海,那么如何才能走花最少的钱,又最节省时间的线路呢?这时候,我们可以把从北京到上海间的路线站标记,那么北京到各路线站都会有相应的金钱和时间花费,我们只需要找出一条从北京到上海所经过的路线站的时间和金钱总值消耗最少的即可。显而易见,对应到图中,就是一张带权的图,即一张网。我们只需要找出起点到终点权值之和最少的路径即可。即target=Min(∑beginendw
用一颗红黑树封装出map和set文章目录用一颗红黑树封装出map和set一、前言二、红黑树模板参数的控制三、模板参数中仿函数的增加四、红黑树正向迭代器的实现五、红黑树的反向迭代器的实现六、红黑树的begin()和end()七、红黑树的rbegin()和rend()八、[]下标访问运算符重载九、红黑树的Find查找函数十、红黑树(修改版)源码链接十一、set、map模拟实现代码1.set的代码2.map的代码一、前言我们都知道set是K模型的容器,而map是KV模型的容器,但是它俩的底层都是用红黑树实现的,上篇博文中我们模拟实现了一颗红黑树,接下来将对其进行改造,继而用一颗红黑树封装出map和s
用一颗红黑树封装出map和set文章目录用一颗红黑树封装出map和set一、前言二、红黑树模板参数的控制三、模板参数中仿函数的增加四、红黑树正向迭代器的实现五、红黑树的反向迭代器的实现六、红黑树的begin()和end()七、红黑树的rbegin()和rend()八、[]下标访问运算符重载九、红黑树的Find查找函数十、红黑树(修改版)源码链接十一、set、map模拟实现代码1.set的代码2.map的代码一、前言我们都知道set是K模型的容器,而map是KV模型的容器,但是它俩的底层都是用红黑树实现的,上篇博文中我们模拟实现了一颗红黑树,接下来将对其进行改造,继而用一颗红黑树封装出map和s
文章目录前言一、二进制计数器(n位2^n状态)1.1可置位计数器1.2加减计数器二、环形计数器(n位n状态)2.1移位寄存器首尾相连构成环形计数器三、扭环形计数器/Johnson计数器(n位2*n状态)3.1移位寄存器来构成扭环形计数器四、格雷码计数器前言2023.5.12一、二进制计数器(n位2^n状态)1.1可置位计数器编写一个十六进制计数器模块,计数器输出信号递增每次到达0,给出指示信号zero,当置位信号set有效时,将当前输出置为输入的数值set_num。注意:这里zero=1和num=0是同一拍输出的,按道理如果根据num=0,然后去输出zero=1应该延迟一拍。所以这里考虑将nu
手撕排序算法系列之:冒泡排序。从本篇文章开始,我会介绍并分析常见的几种排序,大致包括插入排序,冒泡排序,希尔排序,选择排序,堆排序,快速排序,归并排序等。大家可以点击此链接阅读其他排序算法:排序算法_大合集(data-structure_Sort)本篇主要来手撕冒泡排序~~ 目录1.常见的排序算法1.1交换排序2.冒泡排序的实现2.1基本思想2.2单趟冒泡排序2.2.1思路分析2.2.2单趟代码实现3.冒泡排序代码实现4.冒泡排序测试5.冒泡排序的时间复杂度5.1最坏情况 5.2最好情况6.冒泡排序的优化写法 6.1优化思想6.2优化代码 6.3优化算法的时间复杂度6.3.1最坏情况6.3.2
前言为什么要学习排序算法?根据统计,早起大型机CPU资源的四分之一都花在了数据排序上面。排序算法作为最基础的算法,各种操作系统、编程语言都提供了内置的实现。既然排序实现随处可见,我们为什么还要自己动手实现呢?虽然经典算法要动手写写加深印象的道理都懂,但直到最近才发现,每种排序算法里都“暗藏玄机”。排序算法看似简单,其实不同的算法中蕴涵着经典的算法策略。通过熟练掌握排序算法,就可以掌握基本的算法设计思想,包括暴力枚举法、时间空间置换、子问题的分治以及随机化。目录一.排序的概念及其应用二.排序分类1.插入排序2.选择排序3.交换排序4.归并排序一.排序的概念及其应用1.1排序的概念排序:所谓排序,