- 博客(37)
- 收藏
- 关注
原创 多态的学习-面向对象的练习
没有学习多态之前我们想要去处理此应用场景,方法的参数不好处理,只能写出三个不同参数的方法(极度麻烦,愚蠢),如果再添加一个身份,还要去写一个方法,我们要的是一个通用的注册方法,所有人都可接收,所以参数需要传递他们的共同父类对象person,即为person p=new Stduent....之后就算想要添加一个新的身份只要继承person父类的对象都可以创建注册。调用方法时先看父类方法区的虚方法表中有有该方法,有,不会报错,没有,编译报错,最后使用的是子类方法区的show()方法。
2024-12-06 20:32:15
439
原创 java-字符串学习
在使用完Stringbuliider工具他添加字符串,需要将Stringbulider转化成String ,因为Stringbulider他并不是字符串而是一个存储容器,Stringbulider对象不能使用字符串的相关功能方法,s1+s2产生新的字符串,s1+s2+s3产生第二个字符串,s1+s2+s3+s4.........因为字符串本身是不可以改变的,所以每次拼接都会产生一个新的字符串,非常的消耗内存,低效。牢记Stringbulider就是帮助我操作字符串的一个快捷工具!添加元素的在abc的后面。
2024-11-25 17:46:39
385
原创 java-面向对象
出现成员变量和局部变量重名时采取就近原则的理论,局部变量更加靠近输出方法,所以age代表10。如果想要使用private化的age采用this关键字表示成员变量的age即可。定义完成成员变量后快捷生成对应的构造方法以及每一个成员的set/get方法。可以使用快捷键alt+insert/alt+fn+insert。更加快捷生成javabean。
2024-11-21 20:18:16
225
原创 java内存分配
当main进入栈内存中第一步定义了一个int arr[]数组名他可以存放数组在堆空间里的地址,存在new所以使用到堆空间开辟数组空间,然后栈空间中的arr存储地址通过地址找到空间。在对数组元素进行操作时arr[0],通过arr(地址)找到了堆空间中数组开辟的空间再根据索引[0] 找到索引为0的元素操作。
2024-11-14 17:17:47
219
原创 数据结构-查找以及效率分析
将被查概率高的放到靠前位置,可以提高查找成功的效率,但对于查找失败的情况需要从头看到尾,因为无序排列,根据实际情况选择不同的方式,经常查找成功可以考虑上图方式。折半查找的查找效率,绿色节点为查找成功,紫色为查找失败,一共11个结点,每一层结点的数量*查到该层结点需要的步数的综合/11就是成功的ASL,失败同理。因为右子树的节点数一定比左子树多1个或等于左子树的结点,所以当两个数折半查找,画出查找判断树,2结点在右子树。所以要想算出他们的查找效率,我们需要画出来对应的查找判定树(根据折半查找的思想画图)
2024-11-11 19:25:58
472
原创 数据结构-图的概念
修路问题将各个村庄相连,由于经费有限,只能选择将各个村庄联通为先。不存在空图现象,顶点集不能为空,边集可以为空。对于一个生成树,他有n个节点就有n-1条边。研究链接一个顶点的边有多少条非常有意义。将村庄图生成树或生成森林,选择最有路线。子图必须联通,尽可能多的边和结点。有向图的入度=出度,度=边数。给每条边赋权值解决相关问题。无向图的度=边的二倍。
2024-11-09 20:33:34
486
原创 树和森林的遍历(与二叉树联系)
删除结点为分支结点时就要进行找孩子的操作了需要从头开始遍历找到parent数据为指定数据的数据并删除。删除操作1:将指定结点的parent数据赋值为-1表示为空(删除节点为叶子节点)删除操作2:将最后一个数据覆盖到指定结点的数据域(删除节点为叶子节点)依次将树转化成二叉树,他们的根结点看成是兄弟结点相连构成二叉树。右路结点都是平级的兄弟结点.ACFL为4个树的根结点。结点的第一个孩子存做指针,结点的右兄弟存右指针;缺点:查指定结点的孩子只能从头遍历。先根遍历和二叉树的先序遍历一致。树与二叉树的相互转化。
2024-11-09 18:30:40
249
原创 树的存储结构-树,二叉树,森林的相互转换
删除结点为分支结点时就要进行找孩子的操作了需要从头开始遍历找到parent数据为指定数据的数据并删除。删除操作1:将指定结点的parent数据赋值为-1表示为空(删除节点为叶子节点)删除操作2:将最后一个数据覆盖到指定结点的数据域(删除节点为叶子节点)可以看出为了更加高效的找孩子,删除结点时选择操作二更好更省时间;依次将树转化成二叉树,他们的根结点看成是兄弟结点相连构成二叉树。右路结点都是平级的兄弟结点.ACFL为4个树的根结点。结点的第一个孩子存做指针,结点的右兄弟存右指针;树与二叉树的相互转化。
2024-11-09 13:39:17
266
原创 数据结构二叉树-线索二叉树
在二叉树序列中访问给定节点的前趋和后继可以定义两个指针pre和p,pre指向p的前驱节点,判断p==q。找到该结点时pre就是该节点的前驱节点,后趋节点同理,判断pre节点是否等于q此时p是q的后继结点。在中序遍历代码中穿插线索化代码,pre参数是当前结点的前驱节点,与全局变量的pre同理。在二叉树中给定一个节点向后遍历时必须从根结点出发,遍历十分麻烦.建立这些线索更好的去找到前驱结点后继节点.以及给定结点的向后遍历。代码实现二叉树的线索化。
2024-11-06 18:29:55
779
原创 遍历序列构建二叉树
子树同样适用上面的公式,不断分子树判断即可画出二叉树。想要确定二叉树至少给定两种遍历顺序(都有中序)给定一个二叉树他的中序遍历是唯一的。给一个中序遍历他的二叉树不唯一。
2024-10-27 20:35:37
308
原创 二叉树的学习
n=n1+2n2+1:度为1的节点提供1个分支,度为2的节点提供2个分支,没人给根节点提供分支所以+1;除了根节点外的其他节点只有一个直接前驱,有多个直接前驱的逻辑结构叫做图。描述两节点之间的路径是从上到下的,同层没有路径,一条边记录长度为1。任何一个树都可以看成是一个根节点和若干个不相交的子树构成的;我们追求左右子树的平衡就可以的得到更好更高效的二叉排序树。已知二叉树的结点个数为奇数或偶数时可以确定n1的个数。将满二叉树编号更大的节点去掉就是完全二叉树;叶子节点的个数要比度为2的节点个数多一个;
2024-10-27 20:09:52
456
原创 Java开发工具的下载
IDEA全称InteliJ IDEA,是用于Java语言开发的集成环境,它是业界公认的目前用于Java程序开发最。把代码编写,编译,执行,调试等多种功能综合到一起的开发工具。逐级新建最后在class里面写代码;让我们更专注于写代码和运行结果。使用idea包括4个部分。项目,模块,包,类;
2024-06-13 21:25:38
307
原创 初阶java学习3
class关键字表示定义一个类,后面跟随类名,所有的代码写在类名后面的大括号内;通过调整红绿蓝三种颜色的数值可以调配出各种颜色,填充到各个像素点里面构成彩色图;声音数据会涉及到这种波形图,每一段音频都会对声音的波形图进行采样变二进制存储;通常我们听到的无损音乐实际上是对声音的采集点更多,使得听到的音乐清晰悦耳;(不同于C中的字符数组);在我们做类似于表格的数据时制表符有对齐的作用;一个完整的java项目是由多个类组成的;byte的取值范围是-128-+127;使得声音的还原度更高,全损音质则相反;
2024-06-12 20:36:02
441
原创 初阶java学习2
用户只要打开程序,程序的界面会让用户在最短的时间内找到他们需要的功能,同时主动带领用户完成他们的工作并得到最好的体验。(Java Virtual Machine) : Java虚拟机,真正运行Java程序的地方。java语言编写的程序是运行在虚拟机里面的;java在国内外的使用率是非常高的,使用多个领域,更新速度极快与时俱进;Java语言的(标准版),用于桌面应用的开发,是其他两个版本的基础。Java语言不是直接运行在操作系统里面的,而是运行在虚拟机中的。Java语言的跨平台是通过虚拟机实现的。
2024-06-11 15:56:24
689
原创 初阶java学习1
在此电脑界面右键属性找到环境变量中的Path变量并新建保存QQ的地址这样在CMD操作打开QQ,当前目录里找不到时,系统就会去环境变量保存的路径找到qq;我们在打开QQ时,首先qq一定不会被我们安装在C盘而且QQ是经常打开的软件,每次打开的时换盘符,并且进入多层文件夹是非常麻烦;我们想要在任意的目录下都可以打开指定的软件。在计算机发展的初期,没有像我们今天这样的图形化界面,都是黑框输入指令来操作;即将javac和java的路径保存在环境变量的path变量中;只要把qq的路径记录在电脑的。
2024-06-10 17:15:19
901
原创 C语言:程序环境和预处理1
一.程序的翻译环境在ANSI C的任何一种实现中,存在两个不同的环境。第1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令。注意:机器指令也就是二进制识别第2种是执行环境,它用于实际执行代码。在企业中一个项目组有多名成员完成项目,各写各的.c文件最后通过编译器和连接器完成我们的项目;每一个源文件都需要通过编译器翻译成目标文件.obj;所有的.obj文件和链接库共同协作生成可执行程序.exe编译器-cl.exe;链接器-link.exe;
2024-06-07 21:24:59
1237
原创 C语言:程序的翻译环境
链接器同时也会引入标准C函数库中任何被该程序所用到的函数,而且它可以搜索程序员个人的程序库,将其需要的函数也链接到程序。gcc test.c -E(预处理指令) -o(输出) test.i(预处理后生成的文件)#include包含于程序test.c中预处理文件test.i中将头文件中的内容调出来;gcc test. i -S(gcc环境下对test.i文件进行编译处理就结束)符号汇总(符号汇总只统计全局符号,函数中的局部变量不会统计)在ANSI C的任何一种实现中,存在两个不同的环境。
2024-06-07 18:07:06
416
原创 C语言:关于柔性数组的学习
(3) malloc函数给柔性数组开辟的空间大于结构体的大小,以适应柔性数组的预期大小;:如果我们的代码是在一个给别人用的函数中,你在里面做了二次内存分配,并把整个结构体返回给。好了,并返回给用户一个结构体指针,用户做一次free就可以把所有的内存也给释放掉。(1) 柔性数组在定义时前面必须有至少一个其他的成员变量先定义;这里的第一次malloc开辟结构体的空间是为了让我们的数据都在堆去上进行操作;同时最后也释放了两次空间,显示放了结构体中指针的空间;这样的定义内存不会给柔性数组分配任何空间;
2024-06-04 20:31:04
501
原创 (补充)关于文件的读写与判断
ANSIC标准采用"缓冲文件系统"处理的数据文件的,所谓缓冲文件系统是指系统自动地在内存中为程序中每一个正在使用的文件开辟一块"文件缓冲区"。如果不做,可能导致读写文件的问题:当我们想要读写下一组数据时没有对上一个文件残留的缓冲区内容进行刷新也没有关闭上一个文件来重置缓冲区;因为有缓冲区的存在,C语言在操作文件的时候,需要做刷新缓冲区或者在文件操作结束的时候关闭文件。包括:函数的返回值,函数的参数,函数的使用场景。文件学习至此结束,关于文件的学习我们只需要学会相关函数的使用和了解一些新的语法规则;
2024-06-03 20:49:49
1044
原创 C语言:关于文件相关知识的学习1
我们前面学习结构体时,写了通讯录的程序,当通讯录运行起来的时候,可以给通讯录中增加、删除数据,此时数据是存放在内存中,当程序退出的时候,通讯录中的数据自然就不存在了,等下次运行通讯录程序的时候,数据又得重新录入,如果使用这样的通讯录就很难受。每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名字,文件状态及文件当前的位置等)。这个文件信息区绑定当前打开的文件;在编写程序的时候,在打开文件的同时,都会返回一个FILE*的指针变量指向该文件,也相当于建立了指针和文件的关系。
2024-05-29 21:32:41
1197
原创 C语言:关于动态内存管理的学习2
有时会我们发现过去申请的空间太小了,有时候我们又会觉得申请的空间过大了,那为了合理的时候内存,我们一定会对内存的大小做灵活的调整。2.这个函数调整原内存空间大小的基础上,还会将原来内存中的数据移动到新的空间。空间不够时会在内存中找到并开辟一块足够的空间返回新空间的起始地址。size_t size:该参数表示开辟每个空间的大小(字节);(同时旧空间的数据也会被拷贝到新空间内;size_t num:该参数表示开辟空间的个数;3.情况1:原有空间之后的空间不够扩容。free()释放的是动态开辟的空间;
2024-05-26 20:11:24
310
原创 C语言:动态内存管理的学习1
函数在申请空间时理论上存在申请失败的情况:当我们的内存只有8G时使用malloc函数申请1T的空间。我们常规的申请空间int arr[110];申请的是栈区上的空间;返回一个void*指针指向开辟空间的起始位置;比如int arr[100]当我们想要存放120组数据时空间不够也不能改变空间;但我们存放80组数据时又存在空间的浪费;因为函数在设计的时候不知道未来使用者会拿开辟的空间存放什么类型的数据;在数组的定义声明时需要写出空间的大小但是这样的方法不够灵活和方便;malloc函数申请的是堆区上的空间;
2024-05-23 21:11:49
690
原创 C语言:关于联合体的学习
联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联合至少得有能力保存最大的那个成员)。联合体内的成员不是每一个都有独立的空间存在共用空间(合租);这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体)。联合体大小至少是最大成员的大小5;a用的时候c不能用,c用的时候a不能用;当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。不是所有的联合体大小都是最大成员的大小;联合体的大小至少是最大成员的大小。
2024-05-22 21:14:16
657
原创 C语言:关于枚举的学习
2.和#define定义的标识符比较枚举有类型检查,更加严谨.(C语言中体现不明显 C++容易体现);这时候我们的枚举常量就代表我们的星期数1-7。{}内的值我们称为枚举常量,他们之间用逗号隔开;4.便于调试(define定义的符号不便于调试;通过测试我们发现如果没有给枚举常量赋值时,他们的值从上到下由0开始递增;生活中我们可以找到有些值是有限的几种那我们就可以进行枚举;我们可以使用#define定义常量,为什么非要使用枚举?枚举常量没有类型设置;只能用枚举常量来给枚举变量赋值;枚举关键字"enum";
2024-05-22 18:57:29
318
原创 C语言: 关于位段的学习
位段允许几个小的数据类型合并在一起,这样有的成员的起始位置就不是某个字节的起始位置,在内存中为每个字节分配一个地址,一个字节内部的 bit位是没有地址。在VS2022中,位段成员是从右往左分配内存的,并且如果遇到一个字节中的内存不够时,则会抛弃剩余内存,重新开辟一个字节的内存再分配。4.当一个结构包含两个位段,第二个位段成员比较大,无法容纳于第一个位段剩余的位时,是舍弃剩余的位还是利用,这是不确定的。2.位段的空间上是按照需要以4个字节(int)或者1个字节(char)的方式来开辟的。
2024-05-19 14:47:23
830
原创 C语言:判断一组数字是不是有序数组(一串相等的数也是有序)
设置升序标志flag1=0和降序标志flag2=0;在for循环结束后如果一直是升序最后的flag1=1;flag2=0相加
2024-05-19 12:35:20
388
原创 C语言:关于结构体
2.其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处,对齐数 = 编译器默认的一个对齐数与该成员大小的较小值。对齐数就是该成员的大小;显然15不是8的倍数;//12 完全相同的两个结构体(s,s1)的大小却不相同, 为了尽量的节省内存空 间可以将大小较小的成员尽可能放到一起;4.如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。结构体的内存对齐是拿空间来换取时间的做法.(因为对齐数的存在,必然会导致空间的浪费);
2024-05-14 20:37:12
463
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅