自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 8.1.排序的基本概念

如上图,所谓排序,就是把杂乱无章的一堆数据元素按照一定的规则如递增重新排列一遍,总而言之经过排序算法之后,要保证最终的一堆的数据元素的关键字是有序的,在之前的章节中说过(详情见"7.1.查找的基本概念"),各个数据元素的关键字是唯一的,但在排序算法中难免会遇到关键字相同的情况,比如王者荣耀里的荣耀战力排行榜,其中荣耀战力的值为关键字,荣耀战力会遇到相同的情况;如上图,有一个网站(电脑/手机上的浏览器都可以),来自于美国的旧金山大学,这个网站可以帮助我们可视化地理解很多算法,如下图:如上图,

2025-06-10 21:40:44 377

原创 7.4.分块查找

步骤一:在索引表中确定待查记录所属的分块(注:判断待查记录在哪一个分块,可以通过顺序查找,也可以通过折半查找,因为索引表中保存的元素是有序的,并且索引表是用数组的形式即顺序存储来实现的,所以对索引表的查找也可以使用折半查找)步骤二:在所属的分块内进行顺序查找(因为分块内的元素大多是乱序存放的,所以只能采取顺序查找来依次往后对比查找)以上述图片为例,该例中查找表里的数据元素采用了顺序存储,如果该查找表需要进行元素的增加或者删除时就会效率很低,因为比如要增加一个数据元素,该数据元素的值是8,

2025-06-10 21:35:58 629

原创 7.3.折半查找(二分查找)

对于一个折半查找,如果查找区间为[low,high],中间指针mid = ( low + high ) / 2,且每次对比的是mid指针指向的数据元素,那么在查找判定树中对于任何一个结点都有"在同一个根结点下,右子树结点数-左子树结点数=0或1(右子树结点数不小于左子树结点数)"如果包含失败结点,那么折半查找(二分查找)的树高h为h+1。

2025-06-10 21:28:18 816

原创 7.2.顺序查找

线性表分为顺序储存和链式存储,但无论是哪种存储方式,顺序查找都是适用的。以上述图片为例,比如要查找关键字43,只需要从线性表的第一个元素开始,依次往后找,最终找到了43,如下图:上述图片中的代码解读:查找表采用顺序表实现,即数据元素采用顺序存储(注:查找表也可以采用单链表、双链表等链式存储,只是Search_Seq函数里的for循环和return语句会有差别)结构体SSTable采用了动态数组(类似Java的ArrayList集合,动态数组不是链表,动态数组在CSDN收藏里有详解)的方式,其中elem指针会

2025-05-22 21:31:06 638

原创 7.1.查找的基本概念

1.查找:找到所需的数据;2.查找表:用来存储数据的数据结构;3.查找表可以是线性结构、树形结构、图结构(网状结构),因此查找表由数据元素构成;4.查找表并不是特定的数据结构,它只是对于要执行查找操作的这个数据结构的统称,所以查找表并不是新的数据结构;5.关键字:用来唯一区分各个数据元素的数据项->例一:如上图,给出了一张表,表的内容是成绩信息,每个同学会有一个学号,这个学号都是不重复的,所以可以把学号这个数据项作为区分各个数据元素的关键字,姓名无法作为关键字,因为姓名可能重复,比如上述表中的"铁柱"例二:

2025-05-22 21:25:25 570

原创 6.13.拓扑排序

如上图,拓扑排序放到AOV网中,其实就是要求找到做事的先后顺序。

2025-05-22 21:23:04 817

原创 6.12.有向无环图描述表达式

如上图,第5个生效的运算符 * 是基于第3个生效的运算符 * 得到的结果和第4个生效的运算符 * 得到的结果,所以第5个生效的运算符 * 要放在倒数第三层。如上图,第6个生效的运算符 * 是基于第5个生效的运算符 * 得到的结果和第2个生效的运算符 * 得到的结果,所以第6个生效的运算符 * 要放在倒数第四层。第5个生效的运算符 * 是基于第4个生效的运算符 * 得到的结果和第3个生效的运算符 * 得到的结果,所以第5个生效的运算符 * 要放在倒数第四层,

2025-05-22 21:14:01 752

原创 12.输出常量的两个小扩展

题目如下:解答如下:注意:前面的占位符要与后面填入的数据一一对应,因为后面填入的数据是依次填补到占位符的,第一个数据填补到第一个占位符中,第二个数据填补到第二个占位符中,以此类推。上述代码中虽然分成两行写printf语句,但最终的结果写在了同一行,如果要实现换行,该怎么写呢?其实使用换行符即可。此时用的是Windows操作系统,所以换行符是\r\n,修改结果如下:三.有关Windows操作系统的换行符\r\n:1.历史演变:如上图,在以前的机械打印机中,换行的操作是先把纸推回去,

2025-05-18 11:33:05 860

原创 11.输出常量

输出常量,很明显要用到printf函数,很多人会认为打印一个整型常量或打印一个实型常量等直接写printf(23)、printf(18.123)即可,实际上这么写不对,原因就涉及到printf函数了。占位符:通俗地理解就是在打印的时候用占位符先占个位置,之后再用真实的数据填补。

2025-05-18 11:26:01 778

原创 10.实型常量(浮点型常量)细节补充

第一题答案是B。题目要的是正确的整型常量,A是实型常量,因为12.等同于12.0;B是整型常量;C中间有逗号,使得C不是整型常量;D有空格,所以D不是整型常量;所以最终选B,任意的正整数、负整数和0都是整型常量。

2025-05-18 11:22:32 333

原创 6.11.各顶点间的最短路径问题-Floyd算法

对于Floyd算法,采用了动态规划的思想,核心内容是把一个大问题拆分为多个小问题再进行求解,每一个小问题之间有一个递进的关系,比如本篇中的Floyd算法,若求每一对顶点之间的最短路径,首先会把该问题分为n个阶段求解,求解的是对于任意一对顶点即Vi->Vj之间的最短路径,首先设置一个初始阶段:该阶段不允许Vi->Vj之间的路径存在其他的中转顶点;第二个阶段:会考虑如果允许v0顶点作为Vi->Vj之间的中转顶点,那么Vi->Vj之间的最短路径会不会有进一步的优化;

2025-05-02 19:06:50 996

原创 6.10.单源最短路径问题-Dijkstra算法

以上述图片为例来解释Dijkstra算法,其中的图是有向图,之所以不使用无向图,是因为无向图与有向图的原理一致,无向图的一条无向边就对应有向图的两条有向边,

2025-05-02 18:58:24 647

原创 6.9.单源最短路径问题-BFS算法

以上述图片为例,比如从G港到Y城,可以是G港->R城->Y城,也可以是G港->P城->Y城等,有很多条路径都可以实现从G港到Y城,但要从中找出G港到Y城距离最短的那一条路径,这就是单源最短路径问题。单源最短路径问题就是只有一个源头,从该源头出发,到达其他任意一个顶点可以走的最短路径。对于单源最短路径的题型,需要掌握BFS算法(可以求无权图的单源最短路径)和Dijkstra算法(可以求带权图和无权图的单源最短路径)。

2025-05-02 18:50:22 1167

原创 4.换行和续写

假设在本地文件中要输出数据aweihaoshuai 666,在输出这个数据时要换行写出,如下图:假设在一个文本文件中已经存在数据aweihaoshuai,如果此时再次写入数据如diyishuai,若不想把原来的数据清空,而是想接着写即续写,如下图:(按照之前的写法使用write方法写出数据会把原有的数据清空再写出数据)将数据写入文本文件的过程中,要想实现换行,只需要写出一个换行符即可(注意:不同的操作系统中换行符是不同的)。对于Windows操作系统,以下图为例:Windows操作系统的换行符是\r\n,叫

2025-04-26 15:38:15 877

原创 6.8.最小生成树

假设有一个城市叫P城,P城周围规划了学校、农场、电站、渔村、矿场,各个地方之间有上图所示的修路方案,其中数字表示修路的成本,比如修一条P城和学校之间的路需要1块钱,修一条学校和矿场之间的路需要5块钱,现在为了节省P城的财政支出,没有必要把所有的可行的道路都修一遍,因此需要制定一个修路方案,这个方案要求所有地方都是连通的即各个地方之间是相互可到达的(各个地方之间不一定是相邻的),但是成本又必须降到最低,此时有如下两种方案:左边的方案可以使得各个地方连通,代价是20块钱(图片打错了);

2025-04-18 23:13:20 930

原创 6.7.图的深度优先遍历(英文缩写DFS)

假设图使用了邻接矩阵或者邻接表存储,如上图,邻接表中各个链表中顶点号都是从左向右递增的,因此,对于某一个顶点,要找到与该顶点相邻的其他顶点,在该邻接表中找到的顺序与左边的邻接矩阵找到的顺序是一致的,因为邻接矩阵的顶点号也是从左向右递增的。下图的两个例子都是从2号顶点开始深度优先遍历图,左边的例子基于之前第一个邻接表,右边的例子基于之前第二个邻接表,由于邻接表的不同,即使从同一个顶点开始深度优先遍历,得到的遍历序列也可能不同,:深度优先遍历的过程中也是在探索各条边所连接的顶点的过程,

2025-04-18 22:58:08 814

原创 6.6.图的广度优先遍历(英文缩写BFS)

图的广度优先遍历类似于树的层序遍历(广度优先遍历),因为树是特殊的图(没有回路的图就是树)

2025-04-18 22:45:01 1013

原创 6.综合练习1-创建文件

题目要求是"在当前模块下的aaa文件夹",此时在左侧的目录中,是没有aaa文件夹的,所以要先创建a.txt文件的父级路径aaa文件夹,由于是在当前模块下操作,所以用相对路径(不带磁盘的路径)即可->注:这里不需要调用exists方法判断aaa文件夹是否存在,因为如果要创建的aaa文件夹已经存在,那么会创建失败,方法mkdirs返回false,如果aaa文件夹不存在,才会成功创建,方法mkdirs返回true。上述图片中,此时左边的目录中就会有aaa文件夹,该文件夹中会有一个a.txt文件。

2025-04-08 18:49:40 481

原创 8.方法引用综合小练习2-获取部分属性并收集到数组

首先要明确一点:map方法中所做的操作并没有创建Student对象,因此map方法中使用方法引用的话不能引用构造方法,这里可以直接使用引用静态方法改写,因为map方法在main方法里,main方法是静态的。->因此可以用stream流里的map方法把集合中的学生对象转换为姓名即字符串型(注:这不是过滤元素,不能用filter方法),再使用toArray方法收集到数组中。题目要求是"只获取姓名并放到数组当中",

2025-04-08 18:25:37 148

原创 9.C语言的常量

,比如'A','b','1'和'!'->注:单引号里的字符必须写一个,字符只能是大小写英文字母、数字或英文符号(空格也算英文符号即' ')比如:整型常量123可以用于计算,而字符串常量"123"就不能用于计算,如果仅仅只是展示,整型常量123和字符串常量"123"都可以。''虽然有单引号,但没有大小写字母、数字或英文符号中的任意一个,且长度不为1,因此就不是字符。' '里面有一个空格,空格属于英文符号,而且有单引号,所以是字符常量。'¥'这个不是字符,虽然有单引号且长度为1,但¥是$的中文符号。

2025-04-06 13:22:36 290

原创 6.5.图的基本操作

邻接矩阵以上述图片为例,例如要找C顶点除当前邻接点的下一个邻接点,可以扫描C行的数据(也可以扫描C列的数据,因为此时是无向图,邻接矩阵是对称的),直到找到除当前邻接点的下一个1,就找到了C顶点除当前邻接点的下一个邻接点,假设C顶点当前的邻接点为A顶点,邻接矩阵中A顶点之后的下一个为1的数据对应的顶点是E顶点,所以顶点C除当前邻接点A的下一个邻接点是E顶点。

2025-04-05 21:42:05 848

原创 3.字节输出流FileOutputStream写出数据的三种方式

上述图片的第三个write方法是只把b数组里的一部分数据写到指定文件中->第一个参数byte[] b就是装着要输出的数据的数组;第二个参数int off是起始索引;第三个参数int len表示要截取的个数->比如起始索引off为0,len为3,表示要写出的数据是从b数组里的0索引开始,一共写3个数据。上述图片的第二个write方法用于一次写出多个字节数据,其中需要把要写出的数据先放到一个byte类型的数组中,再把整个byte数组中的数据写到文件中->顺序是把byte数组里的元素依次写入指定文件中。

2025-04-05 21:30:56 519

原创 2.IO流的体系和字节输出流FileOutputStream的基本用法

父类对应的子类对应的子类对应的子类InputStream类FileInputStream类:File代表作用即操作本地文件的字节输入流,InputStream就是FileInputStream的父类ObjectInputStream类:Object是作用即操作对象的字节输入流, InputStream就是ObjectInputStream的父类。

2025-04-05 21:20:57 1081

原创 8.关键字

int表示整数,return表示程序结束了。

2025-04-02 13:22:37 212

原创 7.注释扩展知识点

在写注释的时候会发现一个问题,无论在写单行注释时,还是写多行注释时,注释的格式"//"和"/* */"都是手动写上去的,那如果不想要该注释了,也是手动删除,这样太麻烦->因此可以通过快捷键实现快速注释和取消注释。加注释的快捷键:ctrl+K,ctrl+C(这两个快捷键组合使用,可单行注释,可多行注释)或者ctrl+/(仅单行注释)或者ctrl+shifr+/(仅多行注释);取消注释的快捷键:ctrl+K,ctrl+U(这两个快捷键组合使用)。如下图,没有加单行注释前:如上图,如果要加单行注释,一定要先点一下

2025-04-02 13:19:21 779

原创 Java中GUI图片显示出错解决方案

如下图的imagine文件夹里的1.webp图片,此时后缀名不是.png,

2025-03-29 00:47:20 163

原创 Visual Studio 2022中打开其他项目的步骤

因此一定要找到VS项目才可以在Visual Studio 2022中进行操作与运行。此时在右侧的目录中是没有源文件的,意味着无法运行。此时右侧的目录中有源文件,是可以运行的。

2025-03-28 16:43:26 894

原创 1.IO流的概述

当玩拼图游戏时被打断,打断的过程中已经玩的游戏的进度不能丢失呀,这里可能会有疑问?

2025-03-25 12:01:30 596

原创 6.注释的基本使用

如果注释的内容比较多,一行写不下,就可以使用多行注释VS中写多行注释时先写一个/*,编译器VS会自动生成后半个 */选中要注释的内容,再ctrl+shift+/可把要注释的内容进行多行注释alt+鼠标左键:实现竖着勾画ctrl+滑轮:可修改视野单行注释:多行注释:三.注释的设置:在VS中,使用ctrl+滑轮可修改视野,但这类修改是暂时的,如果想要变成永久的,该怎么办呢?而且如果觉得注释里的字体不好看,该如何修改字体呢?未修改前:步骤:VS上方的"工具"->"选项,进入"选项"界面:打开"环境"的

2025-03-24 13:16:15 239

原创 5.HelloWorld执行流程分析

选中项目HelloWorld2的名称->鼠标右键点击该名称->在文件资源管理器中打开文件夹:其实就是打开本地文件夹。运行上述代码时编译器底层做了许多处理,通常只需要关注编写代码和运行代码即可。其中只有一个后缀名为c的文件,没有编译之后的obj文件和exe文件。所以针对一个C程序而言,完整的执行过程如上述。

2025-03-21 12:05:50 297

原创 4.HelloWorld代码分析

预处理#include<stdio.h>:表示提前找到stdio.h这个文件C语言程序的主入口:main函数(必须是main函数,名字不能变)printf是输出语句,要结合库函数#include<stdio.h>使用。

2025-03-20 22:06:51 315

原创 3.VS的使用与第一个程序Hello World(vs版)

无论是Java、Python、C、PHP等语言,第一个程序都是写Hello World,这是因为C语言之父丹尼斯 里奇写了一本书籍《C程序设计语言》中第一个程序就是展示Hello World,所以之后的编程语言都延续了这个传统,把Hello World当作是入门的第一个代码。

2025-03-20 22:02:37 793

原创 7.方法引用综合小练习1-转成自定义对象并收集到数组

【代码】7.方法引用综合小练习-转成自定义对象并收集到数组。

2025-03-20 21:55:27 133

原创 2.C语言编译器环境搭建

直接在腾讯电脑管家就可以下载,但版本可能比较低;其中Microsoft是微软公司,指的是VS是微软公司发布的,Visual Studio就是该编译器的名称,2022是版本号,版本号不固定,但一般选择最稳定的版本中最新的其中Microsoft是微软公司,指的是VC是微软公司发布的, Visual C++就是该编译器的名称,2010是版本号,版本号不固定,但一般选择最稳定的版本中最新的对于编译器的选择:Dev-C++适合日常编程如果是应付各种考试,可以选择Microsoft Visual C++ 2010(学习

2025-03-18 15:51:44 1023

原创 1.C语言开篇

例如此时要看电脑里的一个视频,此时就要用到计算机语言操作计算机,而不是对电脑喊,但一般看视频时用视频播放器即可,也没有用到计算机语言啊,实际上我们接触到的所有软件都是已经写好的代码,而这些代码就是计算机语言,只不过是程序员把这些代码即计算机语言打包起来了才形成了软件供用户使用。

2025-03-18 15:44:26 298

原创 6.引用数组的构造方法

这里要引用数组的构造方法,所以返回值就不要考虑了,只需要引用的方法结束后创建一个Integer型数组的对象即可,这里直接引用Integer类的构造方法就行,因为Integer类的构造方法结束后就会自动创建Integer类对象,本例中toArray方法里的apply方法的形参是整型,返回值是Integer[],功能是创建一个Integer类型的数组,长度与流中数据的个数一样,并把流里的数据放到创建的这个数组中,引用数组的构造方法的目的是创建一个指定类型的数组对象。集合中存储一些整数,收集到数组当中。

2025-03-17 13:11:59 276

原创 5.类名引用成员方法

决定了可以引用哪些类中的方法,也就是说使用当前方式进行方法引用,不是所有类里的方法都能引用,这个类是有规定的,这个主要决定于第一个形参(在之前学的引用其他类的成员方法中,该方式可以引用所有类的成员方法,只需要获取到那个类的对象,再进行方法引用即可)。注:这种方法引用带有局限性,不能引用所有类中的成员方法,能引用的方法和抽象方法的第一个参数有关,第一个参数是什么类型的,那么就只能引用这个类中的方法。方法引用的前提条件之一:被引用的方法的形参和返回值,需要和抽象方法的形参和返回值保持一致,

2025-03-17 13:09:41 729

原创 4.引用构造方法

>3和4.被引用的方法的形参和返回值,需要跟抽象方法的形参和返回值保持一致,而且被引用的方法的功能需要满足当前的需求,这里要注意的是:此时引用的是构造方法,引用构造方法时就不需要考虑方法的返回值了,此时的抽象方法指的是apply方法,apply方法的形参类型是String型,作用是实现将数据封装成Student对象,但在Student类里并没有形参类型是String型、作用是实现将数据封装成Student对象的构造方法,不符合,3.被引用的方法的形参和返回值,需要跟抽象方法的形参和返回值保持一致;

2025-03-17 13:07:34 847

原创 3.引用成员方法

​​/* go对象起初只被定义在initView方法中,但需求中在actionPerformed方法中也需要用到go对象,而且在运行时需要initView方法比actionPerformed方法先运行,意味着如果actionPerformed方法此时要想用到go对象,就必须从initView方法中获取,此时只能通过形参传递go对象,但actionPerformed方法是Java已经写好的,而且是被重写的,Java写actionPerformed方法时形参中没有关于go对象的,

2025-03-14 13:31:25 641

原创 19.包装类

包装类就是把基本数据类型转换为对象(引用数据类型)上述图片中前三个得到进制的方法的返回值都是String型,而不是整型,原因:1.比如二进制可能有01010101,但如果是整型,整数中0是不能做开头的,这就出现了局限性;2.整型中long型和int型是有长度限制的,以int型为例,int型最多只能取到21个亿,也就是int类型最多只能有10位,而二进制可能有30多位、40多位和50多位,所以int型可能装不下,long型同理,只有String型可以,这也就是为什么返回String型。

2025-03-14 13:22:20 770

空空如也

空空如也

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

TA关注的人

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