- 博客(43)
- 收藏
- 关注
原创 单链表面试题---移除链表元素和翻转链表
分别定义两个指针,分别为cur和prev,让cur=head.next,让prev=head。如下图cur指针是用来确定该节点的数据是否为要删除的数据,如果cur指向的节点的数据为要删除的数据,则我们让prev.next=cur.next,然后再让cur=cur.next。如果cur指向的节点中的数据不是要删除的,则让prev=cur,cur=cur.next。过程图假设11是我们要删除的数据,则观察图,看到cur指向的数据为11,则执行。
2024-07-11 15:25:45
676
27
原创 Java---包装类与泛型
在Java中,由于基本数据类型不是继承Object类,为了在泛型代码中可以支持基本数据类型,Java给每个基本数据类型各自提供了·一个包装类。如下图除了char和int基本数据类型的包装类型有点特别,其他的都是首字母大写。
2024-07-08 19:33:55
2249
19
原创 Java---认识异常
首先会执行try代码块里面的代码,看其是否抛出异常。如果抛出异常,就会看catch代码块有没有匹配的异常,如果catch边没有找到对应的异常,就会交给上层调用者去处理。如果上层调用者也没有处理异常,则会交给main方法处理,如果main方法也没有处理,则最后就会交给JVM去处理。虽然在Java中,异常的种类也很丰富了,但终会有一些异常在Java中是没有定义的,所以我们要学会自定义异常类。1. 自定义异常一般都会继承Exception类或者RunTimeException类。
2024-06-14 15:03:26
1193
33
原创 Java----抽象类和接口
5. 抽象类中不一定有抽象方法,但有抽象方法的类一定是抽象类。6. 抽象类中可以有构造方法,供子类创建对象时,初始化父类的成员变量。
2024-06-09 14:51:05
1142
20
原创 力扣----轮转数组
题目链接:189. 轮转数组 - 力扣(LeetCode)我们可以在进行每次轮转的时候,先将数组的最后一个数据的值存储起来,接着将数组中前n-1个数据依次向后移,最后将存储起来的值赋给数组中的第一个数据。先将数组中最后的一个元素的值存到变量tmp中,如下图接着将数组中前n-1个数据依次向后移,如下图 最后再将tmp中的值赋值给nums[0],如下图 以上图是表示一次轮转的,如果还要轮转,重复上面的操作。代码实现当我们提交以上代码时,会发现不成功。思路是对的,但是上面代码时间复杂度为O(kn),太复杂了
2024-06-04 16:55:22
649
19
原创 Java-----String类
1.字符 "" , "" , ""都得加上转义字符,前面加上 "\\2. 而如果是 " \ " ,那么就得写成 " \\\\ "。3. 如果一个字符串中有多个分隔符,可以用"|"作为连字符。
2024-06-01 16:10:33
2499
30
原创 Java-----Comparable接口和Comparator接口
1.当前阶段如果我们想要进行自定义类型之间的比较,我们要使用Comparable接口。2.重写接口里面的方法是我们根据需求来决定如何重写compareTo方法,重写后的compareTo方法里面的具体实现就是我们的比较规则。
2024-05-30 16:34:50
836
22
原创 面向对象------多态
例如:彩色打印机和黑白打印机。彩色打印机和黑白打印机是不同的对象,但打印(行为)这件事分别发生在它们身上的时候,彩色打印机打印的是彩色的,而黑白打印机最终打印的结果却是黑白色的。
2024-05-26 16:23:31
870
24
原创 面向对象-----继承
1.super和this都是Java中的关键字。2.都只能再非静态方法中使用,只能用来访问非静态成员变量和成员方法。3.在构造方法中使用this和super关键字调用构造方法时,只能位于第一行,并且this(...)和super(...)不能同时存在。1.this关键字当前对象的引用,当前对象即本类实例化的对象,super关键字是子类从父类继承的属性和方法的引用。2.this关键字使用来调用本类的成员方法和成员变量,super关键字是用来调用父类的成员变量和成员方法。
2024-05-23 17:09:24
972
10
原创 JAVA-----封装性
这下我们来解决前面遗留的问题,什么是不同包中的类,同一个包中的不同类。这里我们先来学会建立自定义的包。右击src,点击New,再点击Package,就会跳出以下界面。接着在输入框中输入你的包名就行了。当我们建立自己的包之后,如上图所示,就是我建立的一个名字为Demo的包,接着我们在这个包中在建立类就行了。在自己的包中建立类之后,会自动跳出以下代码。第一行代码表名我们创建的Test1类是在哪一个包中。接下来我们来介绍同一个包中的不同类和同一个包中的同一类。int a;
2024-05-18 20:59:49
2167
26
原创 JAVA-----初识类与对象
我们举生活中的例子-------洗衣服。传统的洗衣服方式如下图所示如果我们按照上图的方式洗衣服,我们每一个步骤都是要参与的,类似以上的解题的思想就是我们平常所说的面向过程。但是现在我们有了洗衣机。我们洗衣服的方式如上图所示,我们只要将衣服和洗衣粉放进洗衣机里面去,然后洗衣的操作我们就交给洗衣机就行了,我们没必要了解洗衣机是如何进行洗衣服的,这就是类似于面向对象的思路。面向对象就是关注对象,关注对象与对象之间的交互。每个对象都有自己的操作。
2024-05-16 16:55:26
846
20
原创 链表经典算法OJ题目(2)
快慢指针是指我们创建创建2个指针,一个为快指针,一个为慢指针,且快指针一次走的步数是慢指针的两倍。两个指针同时往后走,当快指针为空或者快指针->next为空时,此时,慢指针的位置恰好是中间节点。
2024-05-05 15:32:56
1119
24
原创 链表经典算法OJ题目(1)
思路分析:思路1:我们可以遍历链表,找到要删除的数据,并将该节点free掉就行了。不过该思路有点复杂,因为我们在移除一个节点的时候,我们还要找到要移除节点的前一个节点。我们可以创建一个新的链表,通过遍历原链表,将不是要移除的节点尾插到新的链表就行了。代码实现注意事项,最后我们要将newtail的next置为NULL。
2024-05-04 16:37:51
328
11
原创 C语言----汉诺塔问题
简单来说,就是有三个柱子,分别为A柱,B柱,C柱。其中A柱从上往下存放着从小到大的圆盘,我们需要借助B柱和C柱,将A柱上的所有圆盘转移到C柱上,并且一次只能移动一个圆盘,且在移动的过程中,大圆盘不能再小圆盘的上面。
2024-05-03 16:27:48
398
7
原创 数据结构----顺序表
在学习顺序表之前,我们先来了解一下数据结构。数据是什么呢?我们在生活中常见的名字,数字,性别等都属于数据。结构又是什么呢?在计算机中,结构就是用来保存数据的方式。总的来说,
2024-04-18 16:03:09
759
12
原创 C语言-----结构体详解
位段的声明和结构体是类似的,主要有两个不同。1.位段的成员必须是 int,signed int和unsigned int 类型的。但是在C99中位段的成员可以是其他类型的。2.位段成员的后面必须要有一个冒号且冒号后面要有一个数字。举例struct Aint _a:2;int _b:5;int _c:10;int _d:30;上述代码就是一个位段的声明。既然我们说合理的位段设计可以节省空间了,那么其是如何节省空间的呢?紧接着来介绍位段的内存分配原则。
2024-04-13 21:45:43
1217
11
原创 C语言---浮点数在内存中的存储
当E全为0时,真实E就是一个非常小的数字了,因为前面我们说过E在存入内存中,要加上一个中间数127或者1023,如果加上这个中间数E在内存中还为0的话,E的真实值为1-127或1-1023了,这时E就是一个非常小的数字了,这时也不会将M的整数部分1不上去了,这时,原来的浮点数就是一个非常逼近0的数字了,一般情况下都会默认等于0。当后面以%d形式打印时,要以有符号整型的形式打印,这时上面的二进制就会被认作是9.0的补码,由于无符号数的原码,反码,补码相同,由上面二进制计算可得应该是一个非常大的数字。
2024-04-07 21:42:43
1076
7
原创 C语言-----数据在内存中的存储(1)
我们之前就了解过整数的二进制写法分别有3种,分别为原码,反码,补码。整型在内存中存储的是补码。原码,反码,补码都有自己的符号位和数值位,符号位为1时,则表示负数,符号位为0时,则表示正数。注意:正数的原码,反码,补码相同。而负数的原码,反码,补码是不一样的。负数的原码就是将其数字转换为二进制,得到原码。对原码除符号位外的数值位进行取反,得到反码。反码+1 得到补码。以上是有负数的原码得到其补码的过程。由负数的补码得到原码也可以通过 对补码进行取反加1得到其原码。
2024-04-04 22:18:04
804
10
原创 C语言------字符函数和字符串函数
在学习编程的过程中,我们会经常会遇到一些字符和字符串,为了方便操作字符和字符串,C语言标准库中就提供了一系列函数。那么,接下来就学习下这些函数。
2024-03-30 21:52:08
872
9
原创 C语言-----qsort()函数
前面向大家介绍了冒泡排序,冒泡排序的核心思想是让数组中相邻的元素进行比较,这是一种常见的算法。但是冒泡排序有一个缺陷,就是冒泡排序只能对整型类型的数组进行操作。所以当我们要对其他类型进行排序时。例如:字符串类型的数组、结构体类型的数组。则冒泡排序此时就不起作用了,那我们要如何操作呢?C语言为例帮我们解决这个问题,就创建了一个排任意数据类型的函数------qsort()函数。
2024-03-23 13:56:20
932
6
原创 C语言-----冒泡排序
当我们确定了趟数之后,我们清楚一趟冒泡排序排一个元素,当我们当我们排序9时,要与相邻的元素就行比较9次,当我们把9排序完,进行第二趟冒泡排序,排序8时,要与相邻的元素进行8次比较。上述方法也有一个缺陷,也就是当数组为 9,1,2,3,4,5,6,7,8 的这种情况时,明明只要排序一个9进行了,但是上面的代码还是会一个个进行冒泡排序,这样就会浪费时间。我们让数组里面相邻的两个元素进行比较,如果前面元素的值大于后面元素的值,那么就将它们两个的值进行交换,直到前面的数小于后面的数。简单来说,是一种排序的思维。
2024-03-20 11:20:22
391
4
原创 C语言----宏assert()断言
一个最大的好处就是当我们使用assert()宏时,我们无需更改代码就可以关闭和开启宏assert(),如果确定程序没有问题,无需再用到宏assert()的时候,一般我们在DEBUG选择使用assert(), 在release版本禁用,这样在VS集成开发环境中,在release版本中直接就优化掉了,是程序员在检查代码的同时,也不会降低用户使用程序的效率。代码运行到这个语句时,会先检验指针变量p是否为NULL,如果不是NULL,则程序就可以继续运行下去,如果指针p为NULL,则该程序就会报错,终止运行。
2024-03-17 14:33:29
468
7
原创 C语言——指针(1)
解释:通过函数栈帧可知,在调用main()函数之后,内存会给main()函数开辟一块函数栈帧,也就是一块空间,在创建完空间之后,编译器就会先给main()函数里面随机给上初始值,就如上面的代码,由于没给指针初始化,所以导致该指针随机指向一个内容,因此导致了野指针的出现。当const在*左边时,如int const * a,这是可以将*a看成一个整体,这时const修饰的时指针a指向的内容,而不是指针本身,所以这时候,指针本身的内容是可以改变的,但是这时候,指针所指向的内容是无法被改变的。
2024-03-14 19:42:04
1226
12
原创 操作符详解(2)
1.C语言中已经提供了内置类型,如char,short,int,long,float,double等,但是只有这些内置类型是不够的。假如我们描述一个学生需要名字,年龄,学号等信息。C语言为了解决这个问题,增加了结构体这种自定义的数据类型,让程序员可以自己创造适合的类型,即结构体。2.结构体是一些值的结合,这些值称之为。结构体的每个成员可以是不同类型的变量,如:标量、数组、指针、甚至是其他结构体。3.结构体的关键字:struct。
2024-03-09 18:58:20
967
8
原创 C语言——操作符详解(1)
首先,我们要清楚我们平常所说的二进制、八进制、十六进制等等都是数值不同的表示形式而已,二进制就是用1和0表示数字。八进制就是用0~7表示数字。十六进制就是用1~15表示数字,但是为了防止与二进制混淆,规定用A~F分别表示1~15。
2024-03-03 21:12:37
1000
2
原创 C语言——函数递归
的过程,将Fact(0)得到的值返回给Fact(1),得到1*1,再将1*1返回给Fact(2),得到2*1*1,再将Fact(2)得到的2*1*1返回给Fact(3),得到3*2*1*1,再将Fact(3)得到的3*2*1*1返回给Fact(4)得到4*3*2*1*1,最后将Fact(4)得到的4*3*2*1*1返回给Fact(5)得到5*4*3*2*1*1,最终得到5的阶乘。1.递归的定义:在C语言中,递归就是函数自己调用自己。递归中的递就是递推的意思,归就是回归的意思。2.2.1 画图推演。
2024-03-02 13:54:10
432
3
原创 C语言------操作符(2)
(2)如果exp1的结果为假,就执行exp3,exp3的结果就是整个表达式的结果。1.3 注释: (1)如果exp1的结果为真,执行exp2,exp2是整个表达式的结果。3.2 如果左侧的表达式满足逻辑运算符的条件,就不再对右边的表达式求值,这种情况就称为。表达式1&&表达式2 (两个表达式为真,则整个表达式为真))------其运算结果只可能为0或1。语法形式:表达式1||表达式2;先对左侧的表达式求值,在对右边的表达式求值,这个顺序是保证的。------(里面的问号和冒号是操作符)
2024-01-05 20:49:27
350
1
原创 C语言分支语局(2)-----switch
要注意在每个case后面加beak才能跳出整个switch语句,否则就会执行后面case里printf()里的内容。(5)在switch语句中,case语句和default语句是没有顺序要求的,只要你的顺序满足实际要求就可以。引言:上次向大家介绍了C语言中的if语句,现在在允许我向大家介绍switch语句和一些循环语句。注释:根据表达式不同的值,执行相应的case分支。如果找不到,就职行default分支的语句。(2)switch后的表达式必须是整形形式。(3)case后的值必须是整形表达式/
2024-01-05 20:03:58
514
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人