自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 数据结构基础知识——时间复杂度和空间复杂度

我们在编写程序时会涉及到各种算法,时间复杂度和空间复杂度的作用就是衡量一个算法的好坏其中,

2024-06-24 13:26:07 325

原创 Java中的异常

Java中虽然已经内置了丰富的异常类但是并不能完全表示实际开发中所遇到的一些异常,此时就需要维护符合我们实际情况的异常结构。例如if (!if (!System.out.println("登陆成功");此时我们在处理用户名密码错误的时候可能就需要抛出两种异常我们可以基于已有的异常类进行扩展继承),创建和我们业务相关的异常类.具体方式:1.自定义异常类,然后继承自Exception或者2.实现一个带有String类型参数的构造方法,参数含义:出现异常的原因。

2024-06-08 17:45:19 656 1

原创 小项目——图书管理系统

Java是一门面向对象的语言,因此,要实现图书管理系统,我们要思考其中的对象是谁?有几个对象?先不看操作,只看用户和书的话,有四个对象(普通用户,管理员,书和书架) ,首先,我们用这四个对象先把基本界面写出来,对书架的操作(增删查改)是最后完成的。

2024-05-26 16:22:08 341 1

原创 Cloneable接口和深拷贝

在java中如何对对象进行拷贝呢?我们可以使用Object类中的clone方法。

2024-05-25 17:51:14 290

原创 接口使用实例——数组排序

System.out.println("排序前:"+ Arrays.toString(students));//能不能通过sort方法对Student类型的数组进行排序呢?System.out.println("排序后:"+Arrays.toString(students));//首先,我们需要实现一个Comparable接口int age;//重写接口的抽象方法,在方法中定义比较规则//通过姓名进行比较。

2024-05-25 10:17:59 160

原创 抽象类和接口详解

内部类也是封装的一种体现。

2024-05-19 20:09:53 928

原创 继承与多态(下)

多态的概念:通俗来说,就是多种形态,总的来说:同一件事情,发生在不同对象身上,就会产生不同的结果。

2024-05-19 10:34:08 614 1

原创 继承与多态(上)

可以看到,上面两个类有许多相同的成员变量和成员方法,这是它们的共性,为了提高代码的简洁性,我们可以把这些共性抽取出来,因此java提出了继承的概念,专门。如果父类构造方法是带有参数的,此时需要用户为子类显式定义构造方法,并在子类构造方法中选择合适的父类构造方法调用,否则编译失败。对于上面子类和父类的成员变量/方法相同时,我们要想访问父类的成员变量/方法,就需要借助super关键字进行访问,它的作用是。如果访问的成员变量子类中无,则访问父类继承下来的,如果父类也没有定义,则编译报错。

2024-05-18 18:19:20 833

原创 类和对象详解

class 类名{//1.字段/属性/成员变量//2.方法注意事项类名注意采用大驼峰定义成员前写法统一为public,后面会详细解释此处写的方法不带static关键字后面会了解到//字段,属性,成员变量// 品牌// 型号// 重量// 长// 宽// 高// 颜色//行为,成员方法public void washClothes(){ // 洗衣服System.out.println("洗衣功能");public void dryClothes(){ // 脱水。

2024-05-16 10:19:55 668 6

原创 数据结构——单链表

前面我们学习了顺序表,我们发现它有以下缺点:1.进行数据增添或删除时,可能需要将很多数据后移或前移,时间复杂度高2.增容需要申请新空间,拷贝数据,释放旧空间。会有不小的消耗。3.增容⼀般是呈2倍的增⻓,势必会有⼀定的空间浪费。例如当前容量为100,满了以后增容到200,我们再继续插⼊了5个数据,后⾯没有数据插⼊了,那么就浪费了95个数据空间。为了解决这种情况,我们可以使用一种新的数据结构——链表。

2024-04-13 23:18:59 352 1

原创 数据结构——顺序表

在顺序表中插入数据时,我们需要判断顺序表的空间是否足够,如过不够,我们需要开辟一个更大的空间,而size表示有效数据个数,capacity表示顺序表空间大小,因此当有效数据个数等于顺序表空间大小即。用于实现顺序表的代码较多,这里分别使用了一个头文件SeqList.h(用于创建顺序表,以及对顺序表的函数进行声明)、两个源文件SeqList.c(用于函数的实现),test.c(用于代码的测试),通过头文件的代码,我们可以知道我们需要实现的函数有哪些,下面我们在源文件SeqList.c中实现这些函数,

2024-04-06 17:35:01 553 1

原创 指针面试题目及解析(下)

首先,&a取出的是整个数组的地址,(&a+1)则跳过了整个数组,而a为数组首元素地址,因此(a+1)表示数组第二个元素的地址,*(a+1)表示第二个元素2,ptr-1表示跳过一个字节指向5,因此*(ptr-1)表示5,代码运行结果如下:在这里我们还要理解的问题是,为什么&a+1的类型需要强制转化,这说明&a+1的类型不是int*,那它是什么类型呢?我们知道,&a为真个数组的地址,如果要使用一个指针接收它,那么我们需要用到数组指针,即;因此&a的类型为int (*)[5]

2024-03-28 15:11:18 405 1

原创 动态内存笔试题分析

请问运行这段代码有什么结果?<1>内存泄露:在函数GetMemory中动态开辟了内存却没有释放,造成内存泄露;<2>程序奔溃:再Test函数中调用GetMemory函数是采用的是传值调用,形参的改变是不会影响实参的,因此str还是空指针,这是strcpy对空指针进行解引用操作,就会引发程序奔溃。

2024-03-24 17:28:24 162 1

原创 动态内存管理

目前我们掌握的内存开辟方式,主要是在定义一个变量(如int a=0)的时候由操作系统为我们开辟的空间,但是这样开辟的内存空间是固定的,不可更改的,比如我们在定义一个20个元素的数组时向内存申请了80个字节的空间,那么但我们发现数组的大小太大了或者太小了,想要更改是不可能的,但是动态内存分配而来的空间是可以更改的。要学会动态内存开辟我们就需要学会用来开辟内存的四个函数,malloc,free,calloc,realloc。二、malloc和free1. malloc。

2024-03-24 11:48:42 826 1

原创 结构体详解

(如struct student)构成的,我们知道,什么类型的变量就要使用什么类型的指针去接收(如int类型的变量要用int*类型的指针去接收),而现在由于上面的两个结构体都是匿名的,因此它们的类型是不一样的,故不能将变量x的地址赋值给p。,在上面的结构体中,结构体的最大对齐数为4,且计算出的所有成员所占大小为8个字节(有两个字节因为内存对齐浪费了),而8刚好为最大对齐数的整数倍,因此结构体的大小为8个字节。4.如果嵌套了结构体的情况,嵌套的结构体成员对⻬到⾃⼰的成员中最⼤对齐数的整数倍处,结构。

2024-03-21 14:44:37 713 1

原创 memcpy、memmove的使用和模拟实现

我们的目的是将1,2,3,4,5剪切到3,4,5,6,7中,那么首先p1指向的值会赋值给p2指向的空间 ,然后p1,p2自增指向2和4,然后再进行赋值,那么我们发现,当我们想要将原来的5改成3是,3已经消失了,已近被改为了1,为了避免这种情况,我们可以。在这段代码中,我们预期的结果是1 2 1 2 3 4 5 8 9 10,那么如果是要运行这段代码的话,结果可能是对的,也可能是错的,因此如果是要。开始交换,但是如果是将3,4,5,6,7,拷贝到1,2,3,4,5怎么办呢,这个时候我们可以。

2024-03-17 15:32:06 231 1

原创 指针面试题目及解析(上)

指针使c语言中比较难的一类题目,在很多面试题目上也经常能够看到,下面我们一起来看一些与指针有关的面试题。首先,在做题之前,我们需要了解数组名的一些相关知识,1.sizeof括号里单独放一个数组名,这个数组名表示整个数组;2.&数组名中的数组名表示整个数组;3.除此之外,其它的数组名表示数组首元素地址。注:以下结果均为x86环境下的结果。

2024-03-09 21:25:02 683

原创 模拟实现strlen函数

strlen是c语言的库函数,它用于计算字符串长度,读取到\0时停止计算,具体内容如下图如图可知,strlen有一个参数,为字符指针,指向一个字符数组,其返回类型为size_t(和整形差不多),下面,我们用两种方式实现strlen函数的模拟。

2024-03-08 20:46:41 254 1

原创 模拟qsort函数实现能够排序各种数据类型的冒泡排序法

可以看到,swap函数一共传入3个参数,分别是待交换的两个元素的地址以及数组中元素的大小,这里使用void*类型的指针接收是因为我们不知道参数的类型,因此用空类型指针接收,我们知道,两个整形进行交换是交换了4个字节的内容,那如果我们一个字节一个字节的交换,是不是也能达到同样的效果呢?为了排序这些类型的数组,我们必须对上面的代码进行改造,我们知道,无论是什么类型的数组,它们需要排序的趟数和每趟需要的对比的次数是一样的,很显然,想要编写一个排序各种类型数据的代码,其排序思路是一致的,但是,

2024-03-06 15:53:19 332

原创 旋转数组的最小数字

有一个长度为 n 的非降序数组,比如[1,2,3,4,5],将它进行旋转,即把一个数组最开始的若干个元素搬到数组的末尾,变成一个旋转数组,比如变成了[3,4,5,1,2],或者[4,5,1,2,3]这样的。请问,给定这样一个旋转数组,求数组中的最小值。对于寻找数组中的最小值,我们可以采取遍历的方法,但是对于比较大的数组来说,效率就显得有点低了,通过观察旋转后的数组,我们可以发现,比如数组【3,4,5,1,2】中1为降序的一个数,为最小值。代码中的数组就以旋转后的数组【3,4,5,1,2】为例。

2024-02-19 10:52:45 127 1

原创 数据在内存中的存储

c语言的数据类型可分为整数和浮点数两大类,我们先来讨论一下整数在内存中的存储方式,首先,对于整数,其二进制形式可以分为,原码,反码,补码三种形式,其中原码的符号位不变,其它位按位取反可以得到反码,再将反码加一,可以得到补码。1.大小端字节序以及大小端字节序的判断我们已经知道整数在内存中以补码的形势储存,那么它是怎样以补码的形式储存的呢?我们可以将一个整数的地址打印出来看看。

2023-12-30 21:21:55 1047

原创 扫雷游戏的设计

相信现在可以查看这篇文章的人肯定都看过或者亲自体验过吧,下面是一个扫雷游戏的界面,我们可以看到,每点击一个格子,只要它不是雷,那么就会在这个格子上显示周围8个格子的数量之和,从整体上看,可以将这个排雷界面看成一个二维数组,我们可以用0来表示一个格子不是雷,用1来表示雷,游戏中未点击前的马赛克用‘*’表示,我们知道一个数组的一个元素只能存放一个字符,因此我们需要使用俩个数组来完成这个游戏,我们知道,‘*’是一个字符,所以1和0也应该使用字符‘1’和字符‘0’来表示,以便后续操作。

2023-12-17 09:41:02 799 2

原创 分支语句常见错误

switch语句中只有使用了break才能跳语句,如果某一个case语句中没有break,那么代码就会据徐执行下去,知道遇到break或执行到switch语句结束!其中的原因表达式中a=1恒为真,所以输入任何一个数都可以打印,正确的操作应该是将a=b改成,a。这个其实很多人都知道,但是往往在写代码的时候会忽略这一点,为避免错误,如表达式中有常量的话,同一把常量写在。我们可以看到,if表达式a=b为赋值语句,很显然这是错误的,下面请看输出结果图。令人意外的是,最后的结果是0,为什么呢?

2023-12-02 20:07:13 39 1

原创 scanf的使用

scanf可以说是c语言中常用的函数,但是相信有很多人对它的认识停留在浅层,那么就让我来为同学们刨析一下吧!scanf成功读取变量的个数,如果没有读取任何项,或者匹配失败,则返回0,如果读取错误或读取到文章结尾,则返回EOF。再来看正常运行时的输出结果,从这里我们看到,这里我正常输入了三个数,打印出来sum的值为3,那如果输入两个数后按ctrl+z提前结束输入会怎么样呢?

2023-11-24 09:54:30 28 2

空空如也

空空如也

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

TA关注的人

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