自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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

原创 Java---Cloneable接口---浅克隆和深克隆

浅克隆克隆的是值,深克隆克隆的是引用。

2024-05-28 11:43:19 696 17

原创 面向对象------多态

例如:彩色打印机和黑白打印机。彩色打印机和黑白打印机是不同的对象,但打印(行为)这件事分别发生在它们身上的时候,彩色打印机打印的是彩色的,而黑白打印机最终打印的结果却是黑白色的。

2024-05-26 16:23:31 870 24

原创 Java---图书管理系统(练习版)

【代码】Java---图书管理系统(练习版)

2024-05-25 19:59:37 910 6

原创 面向对象-----继承

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

原创 Java----数组的定义和使用

在Java中,数组是一种相同数据类型的集合。数组在内存中是一段连续的空间。

2024-05-11 21:28:06 1101 24

原创 冒泡排序----深刻理解版本

前面虽然向大家介绍了冒泡排序,但是表达的不是很清楚,这次我带着更深刻的理解向大家介绍以下冒泡排序。

2024-05-09 16:51:16 537 22

原创 链表经典算法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

原创 Java---数据类型与变量

且常量是无法改变的,如果我们的代码有改变常量的操作,程序就会报错。

2024-04-29 21:47:23 1178 18

原创 C语言----单链表的实现

前面向大家介绍了顺序表以及它的实现,今天我们再来向大家介绍链表中的单链表。

2024-04-26 22:02:28 979 17

原创 开始Java之旅

此时JVM会将字节码转换成计算机能理解的形式运行。

2024-04-22 21:42:42 488 12

原创 单链表原码(练习版)

【代码】C语言--数据结构--单链表原码(练习版)

2024-04-20 16:35:09 144 5

原创 数据结构----顺序表

在学习顺序表之前,我们先来了解一下数据结构。数据是什么呢?我们在生活中常见的名字,数字,性别等都属于数据。结构又是什么呢?在计算机中,结构就是用来保存数据的方式。总的来说,

2024-04-18 16:03:09 759 12

原创 顺序表原码(练习版)

以上是我练习写的,会出教程,纪念一下。List.h 文件 函数目录。List.c 实现函数。test.c 测试代码。

2024-04-14 14:57:47 328 4

原创 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语言中的字符函数和字符串函数,今天再向大家介绍一下类似的函数————C语言中的内存函数。

2024-04-02 21:27:48 667 7

原创 C语言------字符函数和字符串函数

在学习编程的过程中,我们会经常会遇到一些字符和字符串,为了方便操作字符和字符串,C语言标准库中就提供了一系列函数。那么,接下来就学习下这些函数。

2024-03-30 21:52:08 872 9

原创 C语言------指针(2)

前面已经向大家介绍了指针的一些基本内容,接下来,就在再我来先大家讲解一下指针的其他内容。

2024-03-26 20:18:36 879 3

原创 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

原创 递归——青蛙跳台阶问题

青蛙跳台阶问题就是关于一只青蛙再跳台阶时,一次能跳一个台阶或两个台阶,那么求出这只青蛙跳到第n个台阶有几种方法。

2024-03-04 22:06:10 549 4

原创 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关注的人

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