- 博客(21)
- 收藏
- 关注
原创 图(Graph)
图(Graph)是一种由节点(Vertices)和边(Edges)组成的数据结构。(Adjacency Matrix)和每种方式有不同的特点,适用于不同的场景。
2026-03-05 15:40:19
407
原创 字典树(Trie)与并查集(Union-Find)
它的每个节点表示一个字符,每条从根到叶子的路径表示一个字符串。过程中,通过递归将路径上的所有节点直接连接到根节点,从而降低树的高度,减少查找的深度。:从根节点开始,逐个插入字符串中的字符。:从根节点开始,逐个查找字符串中的字符,直到所有字符都匹配为止。每个集合用一棵树表示,树的根节点代表整个集合。将较矮的树合并到较高的树上,保持树的平衡。:直接将一个集合的根指向另一个集合的根。:可能形成长链,导致查找变慢。:查找一个元素所在的集合。:将两个集合合并为一个。
2026-03-05 09:33:10
59
原创 高级树:2-3树、红黑树
在插入或删除操作时,如果违反了红黑树的规则,进行旋转和重新染色来恢复平衡。:当插入导致某个节点超过 3 个子节点时,该节点会分裂。:删除时,若节点只有一个子节点,则会进行合并操作。:将右子节点提升到父节点位置,父节点变为左子节点。:将左子节点提升到父节点位置,父节点变为右子节点。- 2-节点:1个键,最多2个子节点。- 3-节点:2个键,最多3个子节点。插入20: [10,20]插入60: [20,40]插入40: [20]插入50: [20,40]插入80: [40]
2026-03-03 23:48:30
388
原创 二叉搜索树(BST)和AVL树
一个节点的左子树高度减去右子树高度。:找到右子树的最小节点或左子树的最大节点,替换要删除的节点,然后删除该最小节点或最大节点。:查找过程与插入类似,根据键值与当前节点的大小比较,递归查找直到找到目标节点或达到空节点。BST树的增删改中不包含调用一个balance函数,是单独调用的,而AVL树是包含的。:从根节点开始,根据键值与当前节点的大小比较,决定向左子树或右子树递归插入。:当右子树比左子树高时,通过左旋操作平衡高度。:当左子树比右子树高时,通过右旋操作平衡高度。:将其子节点直接连接到父节点。
2026-03-03 16:52:08
57
原创 堆(Heap)
是一种完全二叉树,堆顶元素(根节点)是所有元素中的最小值,并且每个父节点的值小于或等于其左右子节点的值。:是一种完全二叉树,堆顶元素(根节点)是所有元素中的最大值,并且每个父节点的值大于或等于其左右子节点的值。:除了最后一层外,每层节点都被完全填充,且最后一层的节点尽可能地集中在左边。:通过“上浮”和“下沉”来维持堆的性质。:当插入一个新元素时,它会被放置在堆的末尾。然后通过上浮操作将该元素与父节点进行比较并交换,直到它到达正确的位置,保持堆的性质。
2026-03-02 11:36:38
85
原创 哈希表(HashMap)
哈希函数将键映射到数组的索引位置,处理冲突时可以选择拉链法或开放寻址法。:当不同的键通过哈希函数映射到相同的索引位置时,就发生了哈希冲突。:对于字符串,可以逐个字符进行哈希,然后结合前一个字符的哈希值。:设计一个好的哈希函数,确保哈希值均匀分布,避免大量哈希冲突。:每个哈希桶(数组位置)不直接存储元素,而是存储一个。所有哈希值相同的元素都放在这个链表中。:计算键的哈希值,将元素插入到对应位置。:根据键的哈希值删除对应的键值对。:将键的哈希值对哈希表的大小取模。:根据键的哈希值查找对应的值。
2026-03-01 23:55:15
115
原创 List集合
Java集合分为Set、List、Queue和Map四种体系Java集合就像一种容器,可以把多个对象(实际上是对象的引用,但习惯上都称对象)“丢进”该容器中。数组绝对不能在原地址上进行扩容,否则会影响其他程序的内存。数组扩容是放弃原地址空间,重新在空白内存处,开辟更大的内存空间。LinkedList集合特点双向链表示意图单向链表:只能向后遍历,节省一个prev指针双向链表:可以双向遍历,删除方便单向循环链表:没有null双向循环链表:没有null适合插入删除频繁,不要求随机访问的场景,
2026-02-27 00:38:34
633
原创 枚举、校验和mybatis plus 条件构造器
枚举值枚举类型使用enum关键字定义每个枚举常量的值必须唯一枚举常量的值必须是整数类型可以自定义枚举值,没有为枚举常量显式指定值,编译器会自动为它们分配值。这些值通常从 0 开始,依次递增。
2026-01-27 16:02:01
858
原创 多态的例题与应用
父类的引用类型指向子类对象,多态必须保证要有继承关系catAnimal是Animal类型的,相当于是创建父类对象,它可以调用所有父类里面的方法,不能调用子类中有但是父类中没有的方法(比如flay),如果父类中的方法被子类重写了,那么就运行被重写后的方法(比如输出值为"猫会跑"的run()函数)。上图目前只有一层继承,如果animal也有父类,那么animal类也可以调用它的父类的方法,如果animal重写了部分父类的方法,调用的时候也同样是调用animal(子类中重写的方法)
2025-11-02 23:48:07
1682
原创 继承、重写和重载、this关键字
父类的方法被子类重写,构造方法不能被重写,重写的子类返回值类型<=父类返回值类型,参数列表必须相同,子类重写的方法访问权限不能比父类的更低,比如父类是public,子类不能是protected,子类和父类在同一个包中,那么子类可以重写父类的所有方法,除了声明为private和final的方法吗。:创建子类Cat的时候一定会创建一个只属于它的父类对象Cat,父类对象Cat里面有Animal里面的变量和方法,先创建父类Cat对象再创建子类Cat对象,方法重写时子类Cat对象中的方法覆盖父类Cat对象中的方法。
2025-11-02 23:46:55
244
原创 计算机底层、存储和读取数据、操作系统
磁盘如何存储数据:盘片上有反光胶,反光胶下有一圈圈的磁道,最中心是一个黑色圆洞,数据存储在磁道当中,磁道上有密密麻麻的磁颗粒,数字信号(0101,假设0为低电平,1为高电平)输入并转换,每个1或0会使磁头(上面绑有线圈,图中为大箭头)的头部带有N级或S级,其在磁道上的移动会让磁颗粒的头部变为N极或S极,每个小的磁颗粒就是1bit的数据,这样把数据存储下来。磁盘如何读取数据:磁头在找到合适的位置停留,盘片旋转,磁头的移动切割磁感线产生电流,不同磁颗粒头部N、S极不一致,读取二进制数据。
2025-11-02 23:40:16
396
原创 javascript控制流程
js控制流程1.js的代码块{}代码应该写在代码块里面 2.一般要求每行代码后面加上;3.数组的遍历4、异常捕获:try代码块中的执行出现了异常,就走catch5、普通的判断函数6、new关键字:创建对象 switch语句
2025-11-02 23:39:00
160
原创 static关键字、final关键字、包装类、泛型
static修饰的代码块在main方法之前执行,也就是先会执行上图中的两个static代码块,这两个的顺序依据“加载顺序是先加载父类再加载子类”,因此也就是先加载Base里的static,再加载Test里的static,接着子类Test的main方法入栈,创建子类对象,依据“创建子类对象之前先把父类对象创建出来”,所以先创建父类对象,public Base()是构造方法,给对象赋初始值,所以执行Base方法,最后创建子类对象,public Test()是构造方法,给对象赋初始值,执行Test方法。
2025-11-02 23:32:51
1388
原创 变量常量、数字运算和字符串
StringBuilder会在堆当中开辟内存空间并完成数组的拼接,(拼接不能在原数组上直接进行),拼接好后调用StringBuilder当中的toString方法,内容是new String(value),这样我们会在堆当中开辟内存空间,指向字符串常量池当中的字符串(来自于StringBuilder当中拼接好的字符串)下图中的this指的是调用equals方法的对象,anObject是另一个被比较的对象,这里的this==anObject 用于比较两个对象的引用是否指向同一块内存地址。
2025-10-29 16:29:20
1479
原创 构造方法、类与对象、输入输出语句
上图中,public Cat(){}是默认不显示的无参构造方法,但如果我们没有明确写public Cat(){},并且重写了默认的无参构造方法(例如下图中右侧的public Cat(String name){},那么默认的public Cat(){}就会被覆盖,左边会报错。类是创建对象的模板,类里面有什么对象里面就有什么,一个类可以创建多个对象,cat1和cat2是由同一个类创建出的两个不同的对象,return是直接结束main方法,循环后面的都不执行了,break在跳出循环之后还会执行循环后面的语句。
2025-10-29 09:38:55
317
原创 jdk、jre、驼峰命名法则、数据类型定义及类型转换
C语言做不到跨平台,而java可以,java主要运行在Windows和Linux上,在Windows上面能够运行的程序也能在linux上运行,是由底层的JVM虚拟机屏蔽底层操作系统的差异,程序是在JVM上面运行。整型:byte short int long 浮点型:double float 字符型:char 布尔型:boolean。存有java标准开发包,存有基础库,比如println。java中整型在做运算时候默认使用的是int类型。10(十进制为8) 10。
2025-10-22 23:19:35
44
原创 基本数据类型和引用数据类型
python和JavaScipt:弱类型语言(不是没有数据类型,而是根据数据去推测数据类型),a=10.5是用的double或float(需要用python测试确定是哪一种)char : 'a' 'b' '#' '&' '你' (通过ASCII码转换为二进制无符号数存储)double:1bit符号位,11bit阶位,52bit数值位。float:1bit符号位,8bit阶位,23bit数值位。int: 1bit符号位 31bit数值位。函数:一般函数 复合函数。
2025-10-21 21:49:29
156
原创 JavaScript基础知识
==(a==b:如果前后两个变量的值相等则返回true) ===(a===b:判断变量是否严格相等,即:两个变量的数据类型是否相同,值是否相等)js当中定义的数组里数据类型可以不同,C语言当中的数组是存储相同的数据类型的集合[1,2,3],["a","b","c"]|| 两个操作数只要有一个为真则为真,否则为假 vara=10b=11 c=12;if((a<b)&&(a>c))&& 两个操作数同为真则为真,否则为假 var a=10 b=11 c= 12;
2025-10-12 11:51:06
288
原创 JavaScript学习
alert()提示框:用于提示信息、展示警告信息或操作确认,会创建模态对话框,用户必须点击“确定”按钮才能继续操作,确保重要信息被注意到。float:在内存中开辟32bit的内存空间:1bit符号位(表示正负),8bit表示阶位,23bit数值位。int:在内存中开辟32bit的内存空间:1bit符号位(表示正负),31bit数值位。char:在内存中开辟一个16bit的内存空间:字符本身无符号,一个16bit的空间。null类型:变量的值为null,定义:var a = null;
2025-10-09 12:53:57
307
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅