- 博客(17)
- 收藏
- 关注
原创 数据结构(5)-DFS
我们来捋一捋,先是A,A的左右结点B和C。然后是B的左右结点,C的左右结点。这个顺序是不是符合先进先出,那我们就使用队列来做。DFS的顺序就是A->B->C->D->E->F->G,这是比较好理解的。那么在代码上我们该怎么解决。一般我们是用DFS的方式来遍历图,或者是树。这里我用一个二叉树来做例子。由于懒得写队列了,我就直接使用C++的Queue来写。这样就实现了二叉树的遍历。
2023-09-14 23:02:45
171
1
原创 C语言与数据结构(4)-快慢指针
这是一种在链表里常见的方法,因为链表的物理结构特殊性,我们如果说要删除链表中的倒数第5个元素,那么我们恐怕要先通过遍历整个链表来获得链表的长度,在遍历找到倒数第五的元素在哪。如果我们定义两个指针p1,p2,让p1打头,让p2永远在距离p1 ,5个结点的地方,那么p1遍历完整个数组,p2自然也找到了倒数第五的地方,直接输出就行了。让第二个指针永远保持在,第一个指针到头结点的位置的一半。我们再来看一个题目leetcode的876题,寻找链表的中间结点。如果用快慢指针的话,就直接一遍遍历过了。
2023-09-13 22:03:53
191
2
原创 C语言指针
如果你需要把一个数组传入一个函数里进行操作,就只要把指向那个数组的指针传入函数就可以了,不需要传入整个数组。我习惯把int* 看成一个整体,把它想象成一个新的数据类型,一个专门表示整型的地址的数据类型。这里的p就是是一个指针了,如果我在定义结构体的时候,没有那个*,那这么写p就是一个结构体了。我们让a指向了arr数组,然后输出了a和arr[0]的地址,这时候会发现a指向的地址和arr[0]的是一样。这是链表里常见的一个结点,注意list前的*号,这个是定义的一个list*指针,如果我们这样写。
2023-09-12 23:28:03
120
原创 c语言与数据结构(3)-单链表反转
链表的反转就是把,把后驱结点变成前驱结点,变一下Next指针域的指向。但如果头结点和后面的结点丢失联系的话,就会找不到其它结点,或者头结点找不到了。所以我们多开几个指针来保存一下结点的位置。经过尝试,要逆转指针需要记录三个结点的位置,至少要三个指针来保存,头结点是一个现成的指针,所以只要开两个新指针,也就是常用的双指针法。其实关于链表的题目动手在纸上画一下,就会有思路,如果只是单纯钉着电脑空想代码该长什么样,很难有结果。对于单链表不熟悉的同学可以看我的上一篇文章。leetcode的206题就是反转链表。
2023-09-11 20:42:27
102
原创 C语言与数据结构(2)-单链表的基本操作
上一节我们学习了线性表,线性表的查询效率是最高的,时间复杂度O(1)。但他有一些缺点,比如如果我们要存入1000万个int型的数字,那么就需要一块可以存入1000万int型的连续的空间。而链表则不需要连续的空间也可以存储。我写代码喜欢把不同功能封装到不同函数中,和王道408书里写的链表代码不一样,但是原理肯定都是一样的。而且关于链表的写法,我看几个人就有几种写法,仁者见仁,智者见智吧。我的下面的代码不一定优雅(可以跑)。
2023-09-10 23:01:33
203
1
原创 C语言与计算机组成原理(1)-int型与原码补码
众所周知,计算机它不认识十进制,它只认识0,1,也就是二进制。我们输入电脑的数字,编译器会把它翻译成二进制,那个就是原码。例如,127,它的二进制是0111 1111。int型里面保存的是带符号的整数。它的最高位是符号位,剩下的31位才是数字位。所以,int型的范围是 [-2^31+1,2^31-1]。在32位编辑器里,int型是4字节(Byte),也就是32bit,32个0或1。,在寄存器里的补码是xxx,要你判断寄存器的数是什么。int型的范围是[-2^31,2^31-1]。
2023-09-08 00:26:02
370
1
原创 二分查找Java实现
解释一点:right=mid+1.为什么这么写。这是为了应对数组只有两位数的情况。同理,left=mid-1也是一样的道理。二分查找的前提是数组已经排好序了。
2022-12-02 22:57:26
152
原创 J线性表Java实现(SequenceList)
其实,线性表我们可以理解成一个存储小数组的大数组,我们对T赋值来确定大数组的数据类型。然后,我们验证一下功能,写一个SequenceListTest类。我们先写一个SequenceList类,实现一些基本功能。调用方法来实现增删改查。这也是Java封装性的体现。使用foreach循环输出结果。以上是个人观点,欢迎大佬指点。
2022-11-30 17:23:09
234
原创 Arduino搭配红外传感器和蓝牙模块
电路连接主要是蓝牙模块的RXD和TXD,和红外传感器的OUT,我们定义对应个端口就行,其它的就是按正负极来连接可以。最近,我怀疑家里进了老鼠,于是决定用Arduino做一个监视器来监控厨房来确定是不是真的有老鼠。器材:Arduino uno,SR505红外传感器,JDY-31蓝牙模块,若干杜邦线。Arduino工作时会亮红色的LED灯,可能会吓跑老鼠,所以我用电胶布把灯贴住了。当我把手放在传感器面前时,手机上显示有老鼠,挪开时是安全。然后,下载一个SPP蓝牙助手在手机上,连接上就行了。
2022-11-25 14:27:58
1916
原创 equals()与==的区别(有图)
如果有,那么String对象会指向已有的“hhh”地址,如果没有现成的“hhh”,才会开辟新的空间,存储“hhh”,并把存储地址传给String对象。这个过程不会在堆里创建s1的空间,而是直接在常量池里开辟存储空间,存储"hhh",(因为String型是我们日常大量使用的,如果每建立一个String对象就在堆里开辟一个空间,那将非常浪费。使用了new就会在堆空间里开辟一个空间给s2对象,这时栈里的s2里存储的就是s2在堆空间里的地址了。而此时栈空间里的s1存储的是常量池的地址。==输出的是false,
2022-10-11 00:11:40
161
原创 Javaweb系列教程(1)—IDEA里Tomcat的安装配置
首先我们要打开Tomcat,找到Tomcat的安装文件,点击bin文件里的startup.bat,这是Tomcat的启动文件。如果不成功,那可能是两个问题,1,Tomcat默认的8080端口被占用。问题1,我们关闭占用8080端口的程序,或者把Tomcat默认的8080端口改成其他的即可。下载好之后是一个压缩包,我们将它解压,记住解压之后的地址,一会配置环境变量有用。如果是这样的一个界面,那么恭喜你,你的tomcat配置成功了。然后,我们添加框架支持,点击项目文件名字,右键,如图。
2022-10-08 00:15:12
1299
1
原创 Autox.js与vscode的连接,并实现自动打卡功能(ccit)
首先我们打开手机的无障碍模式找到显示指针功能打开,这样我们每次点击都可以找到我们点击点的坐标,从代码中的正在打卡之后的第二个click开始就是进入到打卡界面的第一个选项,兄弟们根据自己手机的坐标改正。接着我们需要打开电脑的9317端口,找到电脑右下角wifi图标,点击右键,点击打开网络与internet设置——window防火墙——高级设置——入站规则——新建规则——端口——特定端口9317,然后命名,一直下一步就可以了。我们在插件商店那里,搜索Auto.js,如图,下载第一个和第四个。.........
2022-08-25 22:30:49
7156
3
原创 Java小工具-猜数字游戏(exe版)另附Java文件转exe文件教程
一款Java猜数字小游戏,并且转换成了exe可执行文件。系统会随机生成一正整数(1~100),猜测该数字,猜的次数越少,得分越高,6次猜不中,游戏结束。在这之前你将无法退出程序!
2022-08-19 18:14:33
1368
原创 Java小工具-帮助学委快速检查谁没交作业
大学期间,大家通过VX和QQ向学委发送作业,但是一个班有几十个人,学委要接收几十份文件,如果一个一个对名单,那效率太低。有了这个程序,学委就可以快速检测到没有交作业的同学,非常方便。并且,本程序对于一些奇怪的作业文件命名方式的文件也可以运行。
2022-08-19 16:37:14
763
软件测试期末考试速成资料
2022-12-15
javaweb编程题资料
2022-12-15
java设计模式期末考试选择题100道
2022-12-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人