自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

原创 数据结构:树、二叉树、线索化二叉树、二叉搜索树、AVL树相关知识总结

在⼀棵⼆叉树中,如果所有分⽀结点都存在左⼦树和右⼦树,并且所有叶⼦结点都 在同⼀层上,这样的⼆叉树称为满⼆叉树。⼀棵深度为k且有2^k-1个结点的⼆叉树称为满⼆叉树。( k ≥ 1)。简单来说,就如他的名字一样,所有节点都要“满”,这样的树就是满二叉树。那么,接下来大家看看:这棵树是满二叉树吗:很显然不是,因为7号节点度为0,即叶子节点不在同一层,且节点个数没有达到2^k-1个,也就是我们所说的没有“满”,而这样的二叉树则被我们称之为完全二叉树。

2024-09-04 16:00:19 726

原创 C语言基础:一口气搞定所有指针问题!(包含二级指针,指针在数组和函数以及结构体中的相关问题)

,这里我们简单分析一下底层:系统先读到了p,向右看发现有(),升级为函数,同时确定输入和输出类型,随后我们就用大括号进行初始化,此时系统在内存中分配了一块代码空间来用于存放和执行代码,同时又分配了一块数据空间用来存储函数的局部变量,同时又分配了一块代小的空间用来接函数的传入值,同时要注意的是,函数具有只读性,在初始化之后我们后续只能调用函数,而不能对函数进行任何的修改操作。”于是截止,再向左看,发现const,将p变为只读,随后发现*将p升级为指针,再看到int,确定以四个字节进行访问。

2024-04-25 11:37:10 1542 2

原创 Java笔记:stream流

总的来说,stream流是一种对集合或数组进行操作的简化写法,他将原本需要很多行代码的操作简化成一条代码完成,使代码更加简洁。2.shorted():用于给数据排序,注意,只能给基本数据类型默认排序,如果是定义数据类型,则需要在括号中书写排序规则。5.map():对stream流中的数据进行加工之后再返回新的流。括号中填写加工方式。3.limit():取前多少个数据,在括号中写上对应的数字,则就会取到前多少个数据。1.filter():用于过滤数据,在括号中写符合的条件,符合则留下,否则去掉。

2024-04-08 13:53:33 248 1

原创 Java笔记:Map集合

我们可以清晰的看到,HashSet的底层就是一个只要键不要值的HashMap。其实,除了增强for循环,我们还可以使用Map集合自带的一种方法:entrySet,这种方法可以将Map集合中的键值对方法。Map集合是除collection集合外的另一个比较重要的集合,其存储数据的方式为键值对存取。思考:Map集合是无索引的,故不可以用常规的循环遍历,因此我们需要用增强for循环进行遍历。那么,接下来我要告诉你一个炸裂的消息:Set集合的底层其实就是只要键不要值的Map集合!其特点为:无序,不重复,无索引。

2024-04-02 20:53:26 331 1

原创 Java笔记:collection集合-set类集合

无序、无索引的原因:当集合中存入数据时,底层会对数据的哈希值进行求余,求出的值即为数组的下标,然后底层将数据存在数组的这个下标处。不重复的原因:当数据的哈希值重复(哈希碰撞)时,底层将会以链表的形式将新传入的数据挂在老数据下方,同时底层设置了equals方法,当判断存入的数据和之前某个存入的数据相同时,不会存入,故不重复。对,所以设计者也想到了,在JDK8之后,如果数组场长度大于等于64,且某个链表长度大于8时,底层自动将链表转换为红黑树,方便查找。,是模拟出来的地址,不是数据实际存储的物理地址)。

2024-04-02 18:20:43 409 1

原创 Java笔记:Collection集合—list类集合

简单认识了collection集合之后,我们来了解一下他的常用方法(注意:因为collection集合是所有list集合和set集合的祖宗,所以所有的list或set集合都可以使用collection的方法)前面说过,collection集合包含了list集合和set集合,而set集合是没有索引的,这时候用传统的循环很显然就不合适了,于是我们这里就需要用到另一种循环:增强for循环(foreach)迭代器是一种对象,它允许按顺序访问集合中的元素,而不需要知道集合的底层结构。这样看着是不是已经很简洁了?

2024-03-27 21:02:13 333 1

原创 Java笔记:异常

(重点:只能作用在方法上!那么,认识了两种异常后,我们便可以思考:既然我们通常遇到的错误都是Java底层帮我们写好的异常,那么我们可不可以自己来书写一个异常呢,当然可以,我们之前学过了自定义方法,那么,我们也可以自定义异常来提醒使用我们定义的方法的调用者可能出现的异常。这里在写代码时parse方法就会有红线标注提醒,表示这里很容易出错(但也不一定是错误的),比如上面书写的格式就没有错误,我们再三检查后发现没有错误,想继续运行程序的话,则需要用throws关键字将异常抛出,这样程序便可以正常运行了。

2024-03-27 09:37:15 621

原创 算法:二分查找(Java)

二分查找的作用是用于在一段排好序的数组中(注意:一定要是排好序的数组!)通过每次将数据减半的方法,以便更高效的查找到数据。

2024-03-25 20:11:51 144

原创 算法:选择排序(Java)

思考:既然数组存放的数据是按下标来找到的,那么只要先记i的索引值,如果发现比i处大的数据时更新索引值,每一轮结束的时候,如果索引值与i不一样,则更换i处与索引值处的数据,这样,每一轮只要进行一轮交换就可以解决问题,极大节省了性能!但是,这样的代码其实也有一个很大的弊端,就是如果从i处之后的每个数字都比i要大的话,那么最坏的结果就是要交换n - i次,这样极大的浪费了性能,那么有没有什么好的办法可以节省性能呢,当然有!和冒泡排序类,都是将一个乱序数组中的元素按升序或降序的排列方式进行重写排列的一种算法。

2024-03-25 19:14:43 204

原创 经典算法:冒泡排序(Java)

每一轮遍历时,如果前一个数壁后一个大,则将两个数进行交换,这样第一轮遍历完之后,我们就固定好了最大值,因此第二轮遍历时,我们就可以减少一次遍历,同时确定次大的值,以此类推。实现方法:以正序排列为例,先循环遍历,如果数组中的数字比前一个数字小,则进行交换,最后打印输出。冒泡排序的作用主要是用于将一个乱序数组中的数字按从小到大或从大到小的顺序进行排序。不难发现:每次需要遍历的个数为随i的增大而减小,因此排序的总次数应为i-1次。

2024-03-25 17:12:53 219

原创 Java笔记:方法引用

必须要创建类的对象然后再调用类中的方法,随后,为了简化这一繁琐的过程,我们可以直接用匿名内部类直接调用,省去了创建对象的过程,再后来我们学习了lambda表达式,又一次对匿名内部类进行简化。那么,既然有静态方法引用,那么肯定也就有实例方法引用,格式与静态方法引用类似,但值得注意的是,实例方法只能被对象所访问,所以在使用实例方法引用之前,我们要先创建一个对象出来。注意:用方法引用的时候不用带上参数,简单理解:方法引用的格式是 类名::静态方法名,人家要的是方法名,方法名包含参数吗?

2024-03-24 18:54:19 293

原创 Java:lambda表达式笔记

匿名内部类常用于子类需要调用父类中的某个方法,但是要求功能不同,这时我们会将父类中的方法定义成抽象方法,同时将父类定义成抽象方法,通过子类对其进行重写,再定义对象去调用,匿名内部类省去了先重写再创建对象再调用的繁琐过程。但是这里有一个问题,就是上面定义的类不满足lambda表达式的前提,即:被简化的匿名内部类必须是函数式接口。可以看出,使用匿名内部类明显方便许多,二lambda表达式则是在匿名内部类的写法上再进一步简化。格式: (被重写方法的形参列表)->{被重写方法的方法体。匿名内部类:new(){

2024-03-24 16:35:21 1144 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除