自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 只出现一次的数字 Java题解

除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。如有解释不清的地方,欢迎评论探讨!这里运用了hashset的思想。

2024-05-31 17:42:37 153 1

原创 Java哈希表代码

array数组是哈希表 默认了哈希冲突的阈值是0.75。以上,如果有解释不到位的地方欢迎留言探讨!这是一个内部类,并给出初始化。

2024-05-30 16:04:02 105

原创 Java 实现二叉搜索树 代码

如果左右子节点都在,则用左子树的最大值或者右子树的最小值替换即可,下面给出用右子树的最小值替换的方法。注意,这里删除又写了一个自定义函数。已至删除的位置和其双亲结点,如何让其删除呢?直接在BinarySearchTree类里面写就可以。找到节点并删除,成功则返回true,失败false。如有什么没讲清楚的地方,欢迎留言探讨!找到则返回该节点,没找到返回null。

2024-05-29 19:23:14 427

原创 继承多态 知识要点

继承 extendsclass 子类 extends 父类子类就可以不定义父类当中的成员了使代码重复使用继承之后要添加新成员,否则无意义,自己的成员优先super 指定告诉编译器访问的父类中的成员,构造方法没有被继承,需要super调用。和this一样不能出现在static方法中。super()调用父类的构造方法。必须要在第一行,并且不能和this()同时出现不同包中的子类用super引用java不支持多继承 ,有接口final 常量,方法不能被重写组合 把一个类作为另一个类的成员。

2024-03-21 23:05:15 304

原创 类和对象 java 要点总结

使用**import static**导入包中静态的方法和字段 static修饰的在方法区,不属于对象,通过对象的引用来访问会警告,应该通过类名来访问,属于类。- **包是对类、接口等的封装机制的体现,是一种对类或者接口等的很好的组织方式**,**在同一个工程中允许存在相同名称的类,只要处在不同的包中即可**- 包:域名逆置 package可查看 src底下为默认包 **为了更好的管理类,把多个类收集在一起成为一组,称为软件包**。- 普通代码块/局部代码块 定义在方法中,不需要条件,直接执行。

2024-03-19 13:37:19 376

原创 数据类型与运算符 java

public static void main(String[] args){ //快捷键:psvm main//sout​常见代码补全: 如上 按tab或者回车ctrl+d 复制。

2024-03-17 10:53:20 374

原创 C++ inline内联函数注意点

2.inline函数不支持声明和定义分离开,因为编译器一旦将一个函数作为内联函数处理,就会在调用位置展开,即该函数是没有地址的,也不能在其他源文件中调用,故一般都是直接在源文件中定义内联函数的。3.inline函数会在调用的地方展开时,符号表中不会有inline函数的符号名,故不存在链接冲突。因此可以在一个项目的不同源文件内写相同函数名的内联函数。因为inline只是一种建议,需要看此函数是否能够成为内联函数。例如,比较长的函数,递归函数就算定义为inline,也会被编译器忽略.

2024-03-13 20:17:07 349

原创 Linux基本常识

这两者本质都是因此,只是创建空文件,也需要占用磁盘空间,因为此时已经具有文件属性。而对文件操作方式有两种,一种是,另一种是。

2024-03-13 20:12:04 486

原创 C++模板 易错点

8.C++中类模板的声明格式为template<模板形参表声明><类声明>,并且。5.上题,A通过参数推导,T为int,不存在二义性,调用正确;C.通过参数推导,T为float,不存在二义性,调用正确;,用于指定大小,可以根据指定的大小创建动态结构。14.模板类是一个家族,编译器的处理会分别进行。B.由于参数类型不一样,模板不支持类型转换,4.只要支持模板语法,模板的代码就是。10,如上,三种正确的模板声明方式。2.模板最重要的一点就是类型无关,3.模板运行时不检查数据类型,也。,相当于类型的宏替换。

2024-03-09 13:47:50 364

原创 C++内存分配 易错点

8.上题,申请对象数组,会调用构造函数5次,delete由于没有使用[],此时只会调用一次析构函数,但往往会引发程序崩溃。9.上题,与8不同,对于内置类型,此时delete就相当于free,因此不会造成内存泄漏。但是从代码习惯角度建议加上[]。7.栈可以通过函数_alloca进行动态分配,不过注意,所分配空间不能通过free或delete进行释放。主要存在局部变量和函数参数,其空间的管理由。4.32位系统下,最大的访问内存空间为。是自己申请的空间,在不需要时需要。频繁的申请空间和释放空间,

2024-03-09 13:37:20 357

原创 构造函数:初始化列表 篇

在学习初始化列表之前,我们通常在构造函数中为函数赋初值,但这行为并不能称为初始化。因为初始化具有唯一性,只能初始化一次,而构造函数体内可以多次赋值。因此我们引入初始化列表对类进行初始化。初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个成员变量后面跟一个放在括号中的初始值或表达式。int _month;int _day;

2024-03-05 20:19:01 369

原创 C++ Date类型定义 (类的简单实践案例)

【代码】C++ Date类型定义 (类的简单实践案例)

2024-03-04 22:39:55 457

原创 类与对象详解 C++ (1)

class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。// 类体:由成员函数和成员变量组成// 一定要注意后面的分号。

2024-03-03 21:35:00 407

原创 C语言 宏的优缺点

所以在C++中引入了内联函数的概念。用inline进行修饰。编译时编译器会在调用内联函数的地方展开。引入:当我们需要频繁调用一个函数时,在C语言中会如何实现呢?2.导致代码可读性差,可维护性差,容易误用。宏是在预处理阶段进行替换。3.没有类型安全的检查。1.增强代码的复用性。

2024-02-27 21:11:01 503

原创 引用 C++

注意:需要出了函数作用域、返回值对象还在,才可使用引用返回。给已经存在的变量取别名。和其指向的对象共用一块储存空间。语法:类型& 引用对象名=引用实体;引用在底层上也是指针,实际上都开了空间。b.对象比较大,减少拷贝,提高效率。引用不开空间,指针开空间。b.减少拷贝,提高效率。a.可以修改返回对象。

2024-02-27 20:54:23 464

原创 函数重载 C++

在同一作用域中声明几个功能类似的同名函数,这些函数的形参列表不同(个数或类型)例如:在Linux环境下。

2024-02-26 22:12:16 518

原创 缺省参数(默认参数)

原因:函数在编译阶段进行检查语法、生成汇编语言的工作。如果有多个文件,在编译之前的预处理展开头文件,声明写在“.h”文件里面在编译阶段可以被看见,不会报错。如果写在对应“.c”文件的定义里,编译的时候无法看到,就会报错。定义里的东西在链接的时候才会被编译器读到。使用规则:如果调用时没有实参则用缺省值,有则用指定实参。概念:定义或声明函数时为函数的参数指定一个缺省值(默认值)。半缺省参数:部分有缺省值。*必须从右往左依次给出缺省值。全缺省参数:每个参数都有缺省值。

2024-02-26 22:02:04 390

原创 计数排序C语言

【代码】计数排序C语言。

2024-02-01 14:31:57 322

原创 归并排序C语言实现

【代码】归并排序C语言实现。

2024-02-01 14:17:49 392

原创 直接插入排序和希尔排序

这样整体而言,可以达到优化的效果。我们实现后可以进行性能测试的对比。的取值方法很多,导致很难去计算,因此在好些树中给出的。元素集合越接近有序,直接插入排序算法的时间效率越高。希尔排序法又称缩小增量法。时都是预排序,目的是让数组更接近于有序。的排序码顺序进行比较,找到插入位置即将。总结:冒泡排序就是gap为1的希尔排序。希尔排序是对直接插入排序的优化。时,数组已经接近有序的了,这样就。希尔排序的时间复杂度不好计算,因为。插入,原来位置上的元素顺序后移。,它是一种稳定的排序算法。

2024-01-02 14:34:10 397

原创 设计循环队列

循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。设计你的循环队列实现。循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。

2023-12-23 00:45:42 1336

原创 顺序表和链表

缺点:难以确定需要开辟的大小N,给小了不够用,给大了浪费,不实用,价值小。的储存单元依次存储数据元素的线性结构,一般情况下采用。线性表是n个具有相同特性的元素数据的有限序列,在。1.原地删除数组中的所有元素val。例如:开辟大小为N=7的顺序表。、非顺序的存储结构。顺序表和链表都属于线性表。2.删除排序数组中的重复项。3.合并两个有序数组。

2023-12-19 11:00:43 370

原创 自定义类型详解:结构体,枚举,联合

3.char 1个字节 4+4+1 但是总空间要是最大对齐数的整倍数,这里最大对齐数是int的4 所以应该是4的整倍数,即12。1.联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联合至少得有能力保存最大的那个成员)。结构的每个成员可以是不同类型的变量。如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整。2.当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。

2023-09-25 11:35:07 48

原创 内存函数简单介绍

函数作用:把从source开始的num个字节的内容拷贝到从destination开始的空间里。返回destination的起始地址。使用方法:假设有一个字符串叫arr,把她从第四个位置开始的六个字节大小的空间的内容都放上x。警示:最好不要用来处理重叠内存,可能会在拷贝过程中发生重叠使得结果不符合预期。相对于memcpy,可以处理重叠内存的拷贝。函数模拟:需要根据源头和目的地的先后位置关系来分类讨论。优点:相比于strcpy,可以处理更多类型的数据。返回值的规律类似于strcpy。以字节为单位设置内存。

2023-09-21 16:09:46 40

原创 数据结构(1)时间复杂度

时间复杂度

2023-07-25 09:39:00 88 7

原创 5.27 数据在内存中的储存

字符储存的时候,存储的是ASCII码值,是整型,所以放在整型家族。1 2 4 4/8 8 4 8 单位是字节。5.27 数据在内存中的储存。有符号无符号 只针对整型家族。C语言直接提供的类型。

2023-05-31 17:24:28 65

原创 5.24 初阶测评讲解

后置++ p++解引用是*p 还没++5.24 初阶测评讲解。前一个恒为真,=是赋值。注释会被替换成空格。早期c是没有库函数的。

2023-05-30 23:23:02 46

原创 实用调试技巧(2)

int转化为无符号整型,-1会转化为 特别大的整数。断言 宏 括号内为假就报错 assert。左边debug 右边release。Const 左限制*p 右限制p。语法问题,链接期间发生的错误。5.22实用调试技巧(2)返回目标空间的起始地址。

2023-05-30 20:30:07 34

原创 指针初阶(2)+初试结构体

但是同样也限于两个相同类型的指针变量,不同类型的指针变量之间比较大小没有任何意义。指针之间的大小比较的意义,表示在内存中他们指向的位置的高低关系。指针变量就是指针变量,不是数组,指针变量大小是4/8个字节,专门用来存放地址的。结构是一些值的集合,这些称为成员变量,结构的每个成员可以是不同类型的变量。数组是一块连续的空间,可以存放1或多个类型相同的数据。联系:数组名是数组首元素地址,数组名==地址==指针。name是数组名字,为地址,所以报错。数组是可以通过指针来访问的。指针数组:存放指针的数组。

2023-05-29 17:55:35 32

原创 指针初阶(2)+初试结构体

但是同样也限于两个相同类型的指针变量,不同类型的指针变量之间比较大小没有任何意义。指针之间的大小比较的意义,表示在内存中他们指向的位置的高低关系。指针变量就是指针变量,不是数组,指针变量大小是4/8个字节,专门用来存放地址的。结构是一些值的集合,这些称为成员变量,结构的每个成员可以是不同类型的变量。数组是一块连续的空间,可以存放1或多个类型相同的数据。联系:数组名是数组首元素地址,数组名==地址==指针。name是数组名字,为地址,所以报错。数组是可以通过指针来访问的。指针数组:存放指针的数组。

2023-05-29 17:55:04 33

原创 操作符详解(2)

c的整型算术运算总是至少以缺省整型类型的精度进行的。为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转化为普通整型,这种转换称为整型提升。算术转换:如果某个操作符各个 操作数属于不同的类型,那么除非其中一个操作数的类型转换为另一个操作数的类型,否则操作就无法进行。逗号表达式:从左向右计算,整个表达式的结果是最后一个表达式的结果。表达式求值:1.表达式在计算过程中有哪些类型转换?a和b都进行了有符号位的提升,因此不等,c不用 进行提升。整型提升是按照变量的数据类型的符号位来提升的。

2023-05-14 22:30:23 39

原创 操作符详解(1)

首先不管是正整数还是负整数都可以写出二进制原码:根据正负直接写出的二进制序列就是原码。右移:1.算术右移:右边丢弃,左边补符号位 2.逻辑右移:右边丢弃 ,左边直接补0。②负整数原码反码补码需要计算 符号不变,其他位按位取反-反码 反码 +1-补码。<<左移操作符 >>右移操作符 移动的是二进制 操作数必须为整数。整数在内存中使用的是补码,计算时也是使用补码计算的。除法:1.整数除法(除号的两端都是整数)%:取模操作符的两个操作数必须位整数。最高位是符号位,1为负数,0为正数。

2023-05-10 21:43:14 29

原创 C语言实现扫雷初阶版(不具备自动展开功能)

3.1是雷还是周围雷的各数容易产生歧义-再引入一个数组-存放排查周围雷的个数的信息。2.game() 设置数组 初始化 (数组,行数,列数,初始化的内容-*/0);1.布置雷 2.排查雷。5.代码的实现:test.c-测试游戏的代码,game.c-游戏代码的实现 ,game.h-函数声明。隐藏的时候显示* ,因此雷的信息为字符数组,字符1和字符0;1.扫雷游戏要存储布置好的雷的信息,需要一个二维数组存放。优化-展开一片:1.该坐标不是雷,周围没有雷。2.该坐标没有被排查过。2.用1表示雷 0表示没有雷。

2023-05-10 13:59:08 33

原创 三子棋代码

应用多文件的形式写代码 test.c-测试游戏 game.c-游戏函数的实现 game.h-游戏函数的声明。

2023-05-07 19:52:43 34

原创 三子棋笔记

2.应用多文件的形式写代码 test.c-测试游戏 game.c-游戏函数的实现 game.h-游戏函数的声明。1.游戏在走的过程中要进行数据的存储,可以使用3*3的二维数组char board[3][3];2.没下棋之前数组中存放空格,可以使用一个初始化函数InitBoard()\t为水平制表符 一般是四个空格,包括打印的内容和空格一共4。打印棋盘DisplayBoard()打印数据 打印分割线。下棋 玩家下棋 playermove()1.游戏不退出,继续玩下一把(循环)判断输赢 iswin。

2023-05-07 18:48:39 45

原创 数组(1)

不能用strlen,strlen是用来求字符串长度的,此处为整型数组。字符数组的初始化 可以用这种方法 abc\0。不同数组,先创建的地址大,后创建的地址小。Vs2019 vs2022不支持c99。一维数组的使用 [ ]下标引用操作符。数组传参,本质上传的是首元素地址。下标增长,地址从小到大,从低到高。类型相同的一组数字的集合-数组。地址,在内存中也是连续存放的。汉诺塔问题:b站搜比特大博哥。&arr+1跳过一整个数组。一维数组在内存中连续存放。可以放ASCII码值。可省略行,不能省略列。

2023-05-07 13:48:10 26

原创 函数栈帧的创建和销毁

Rep stos把从edi开始的ecx也就是39h次dword(double word,一个word两个字节)全部改成eax的内容也就是0CCCCCCCCh。今天介绍ebp和esp,这两个寄存器中存放的是地址,这两个地址是用来维护栈帧的。把0Ah(也就是10)放在ebp-8的位置,如果不初始化,打印出来随机值“烫烫烫烫”其实就是类似于CCCC的东西的作用。在不同的编译器下函数栈帧的创建和销毁略有差异,大体逻辑是相同的。把ebp-14h的值(20)放到eax里面。Mov 把esp的值给ebp。

2023-05-06 23:03:33 35

原创 函数(2)

项目名字右击-属性-常规-配置类型-静态库-生成.lib文件 .lib文件是二进制代码,配合.h食用。链式访问:把一个函数的返回值变成另一个函数的参数,如把strlen的返回值作为printf的参数。可以嵌套调用,不可以嵌套定义:一个函数的定义里面嵌套了另一个函数的定义。对于上面的函数,假设输入1234,栈区是这样开辟空间的,回收是从上到下的。函数的嵌套调用:比如 写了一个函数A,里面调用了函数B。函数递归:程序调用自身-函数自己调用了自己,递推-回归。写一个函数,使得每次调用时,num+1。

2023-05-06 18:47:03 35

原创 函数(1)

C语言并不是直接去实现库函数,而是提供了C语言的标准和库函数的约定。函数功能、名字、参数、返回值。库函数的实现一般是编译器去实现的。函数是什么:模块性,负责完成某项特定任务,具备相对独立性。一般会有输入参数并有返回值,提供对过程的分装和对细节的隐藏。C语言把常用的功能进行了封装,封装成一个个函数,提供出来给大家使用。函数调用的两种形式:传值调用和传址调用。写一个函数交换两个整型变量的内容。简单总结C语言常用的库函数。调试方法:调试-窗口-监视。实参在调用时要有确定的值。↑错误,都为奇数不成立。

2023-05-06 13:55:17 37

原创 分支和循环语句(3)

时间戳,任何时间都能转化成一串数字,也就是时间戳。time()函数可以返回一个时间戳 time_t类型是long long类型。char是字符类型,字符的本质是字符的ASCII码值,为 整型。所以字符类型在归类的时候是可以划分到整型里面的。srand需要unsigned int类型,可以用强制转换,只需要调用一次srand函数。一个函数内部,可以前跳也可以后跳,不能跨函数。C》猜对了,恭喜你,猜对了,结束游戏。a》猜到了,提醒猜到了,继续猜。b》猜小了,提醒猜小了,继续猜。右击,转到定义,可以查看具体。

2023-04-20 12:41:19 33 1

空空如也

空空如也

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

TA关注的人

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