- 博客(258)
- 收藏
- 关注
原创 C语言的左对齐符号-
在距离矩阵中,有些地点名称长(如“第三实验楼”),有些短(如“食堂”)。后面自动补充2个空格,凑满8位。这就好比在课程表上,每个课程名称都占据相同的格子大小,整整齐齐。
2025-11-20 21:42:19
386
原创 C语言中#include <limits.h>标准库概述
limits.h是C语言的标准库头文件,主要定义了各种整数类型的大小限制。// 在limits.h中定义的主要常量CHAR_BIT // char类型的位数(通常为8)CHAR_MAX // char类型的最大值CHAR_MIN // char类型的最小值INT_MAX // int类型的最大值INT_MIN // int类型的最小值LONG_MAX // long类型的最大值LONG_MIN // long类型的最小值SHRT_MAX // short类型的最大值。
2025-11-20 01:30:11
417
原创 C/C++报警告“[Warning] deprecated conversion from string constant to ‘char*‘ [-Wwrite-strings]“解决方案
记住这个小提示:当你处理字符串字面量时,优先考虑使用const char*或者std::string,这样既能消除警告,又能让代码更加安全可靠。字符串常量存储在程序的只读数据区,如果通过char*指针试图修改它们,可能会导致程序崩溃,编译器发出这个警告就是为了防止这种潜在的危险操作。具体来说,就是把字符串常量(比如"hello"这样的字面量)赋值给了char*类型的指针。代码中可能存在一个不太安全的类型转换,这个警告其实是在提醒我们,
2025-11-07 12:36:28
200
原创 C语言中关于类型转换不匹配的解决方案
另外,在后面的 node = (HFTree)root;中,如果 node已经是指针类型,那么直接写 node = root;即可,因为 root也是 HFTree类型(即HFTNode*),无需强制类型转换。这样 node`就是一个指针,可以赋值为 NULL,也可以指向已经分配的HFTNode 结构体。NULL通常被定义为 (void*)0,是一个空指针常量。HFTNode是一个结构体类型,而。
2025-11-06 01:03:48
217
原创 2.2.蓝桥杯-数位递增的数
一个正整数如果任何一个数位不大于右边相邻的数位,则称为一个数位递增的数。例如 1135 是一个数位递增的数,而 1024 不是一个数位递增的数。给定正整数 n,请问在整数 1 至 n 中有多少个数位递增的数?输入的第一行包含一个整数 n(1<n<10⁶)。输出一行包含一个整数,表示答案。
2025-09-13 12:19:25
335
原创 4.1.多线程&JUC-什么是多线程?
可以把"多线程"拆分为"多"和"线程"->"多"表示很多,因此只需要知道什么是"线程"即可。"线程"中包含了"进程"的概念,"进程"的概念如下:一个软件运行之后,他就是一个进程。线程的概念如下:如上图,比如一个软件360,360其中有很多独立的功能,因此可以这么理解,360软件运行之后,它的本身是一个进程,而360的各个功能可以看作是多个线程,如下图:因此可以把"线程"理解为应用软件中互相独立,可以同时运行的功能,当同时运行的功能比较多时,就形成了多线程。
2025-09-10 18:32:19
297
原创 3.2.Maven-概述-介绍&安装
Maven的安装比较简单,因为他是绿色版的软件,官方给我们提供Maven的安装包就是一个zip压缩包,在进行Maven安装以及配置的时候,主要进行如下4步操作:第一步:把官方提供的zip包解压,此时Maven的安装就已经完成了;第二步:配置Maven的本地仓库,在本地电脑上有一个目录,这个目录下就是来存放从中央仓库下载下来的jar包,这个仓库就是本地仓库;
2025-09-10 10:56:49
1163
原创 3.5.IO流-字节输入流FileInputStream的基本用法
细节1:如果文件不存在,就直接报错如上图,现在要读取haha.txt文件,由于该文件不存在(左侧目录中没有),所以报错。关键是Java为何这么设计?输出流FileOutputStream有一个特点就是:如果输出数据到指定文件的文件不存在,就会先创建文件,再输出,前提是保证父级路径存在;输入流FileInputStream在读取数据的时候,如果不存在,为什么不会创建,而是直接报错,
2025-09-10 10:41:26
768
原创 7.13.B+树
如上图,上述图片的树是一个B+树,观察其特征。如上图,会发现B+树与分块查找有些类似,在分块查找中会把数据元素分为一块一块的,在索引表中会保存每一块中最大的关键字,现在再看刚才的B+树,第三层中,从左往右,第一部分里最大的关键字为3,第二部分里最大的关键字为9,第三部分里最大的关键字为15,刚好与第二层中从左往右的第一个结点的数据对应上,以此类推。以上述图片的4阶B+树为例->以上述图片的B+树为例,
2025-08-03 13:25:29
668
原创 5.13.树、森林与二叉树的转换
当使用"孩子兄弟表示法"存储树或森林时,最终会呈现出与二叉树类似的形态,所以树、森林与二叉树之间的转换本质上就是画出采用孩子兄弟表示法存储的树和森林。
2025-07-26 01:30:00
1049
原创 AI总结视频以及谷歌浏览器插件安装步骤
如上图,其中有视频里的关键字、全文摘要、章节速览等,有的视频如网课,还会有提取PPT(点进去后在右上角可以导出PPT)的功能,对于上网课很有用(视频上方还有个字"译",可选择生成的文案的语言;视频下方还可以打开字幕)。如上图,视频播放的上方界面也会有每一个章节的主要内容,已经划分好了。1.ChatGPTt=P4F5t=P4F5通义听悟-你的工作学习AI助手阿里云通义听悟是聚焦音视频内容的工作学习AI助手,依托大模型,帮助用户记录、整理和分析音视频内容,体验用大模型做音视频笔记、整理会议记录。
2025-07-24 21:26:09
1671
原创 7.12.B树的插入和删除
以上述图片的5阶B树为例,首先删除关键字60,由于60位于终端结点,所以直接删除即可,并且删除60之后,当前所操作的结点的关键字个数为3并没有低于5阶B树所要求的下限2,如下图:如上图,接下来删除关键字80,80位于非终端结点中,且80删除之后根结点就不存在了,之后该怎么做呢?可以找到80的直接前驱或直接后继来顶替80的位置,先看用80的直接前驱来顶替80的位置,80的直接前驱是77(找直接前驱的方法详情见"5.11.在线索二叉树中找前驱和后继"),如下图:如上图,
2025-07-21 10:53:32
1102
原创 7.11.B树(又名B-树)
回顾二叉排序树(英文缩写BST,又名二叉查找树),详情见"7.5.二叉排序树(英文缩写为BST,又名二叉查找树)"。以上述图片为例,在二叉排序树中查找目标关键字,如果要查找的目标关键字比当前结点的值更小,那么会往左子树这边查找,如果要查找的目标关键字比当前结点的值更大,那么会往右子树这边查找,所以二叉排序树就是用一个关键字把一个有可能存在目标关键字的数域分割成了两份,
2025-07-21 10:46:13
1126
原创 8.2.插入排序
插入排序最好的时间复杂度为O(n),最坏的时间复杂度为O(n²),因此插入排序的平均时间复杂度为O( (n+n²)/2 ),等价于O(n²),插入排序显然是稳定的排序算法。假设共有n个元素需要排序,只要采用插入排序,最终的时间复杂度都是O(n²)注:如果给出的元素序列本来就是有序或者基本接近有序,这种情况下采用插入排序进行排序也可以得到一个很好的执行效果。
2025-07-04 00:41:22
691
原创 7.10.红黑树的删除
如果一棵红黑树的结点总数为n,那么该红黑树删除操作的时间复杂度为O(log₂n)->因为删除操作基于查找操作,红黑树的查找操作的时间复杂度为O(log₂n)在平衡二叉树(AVL树)中删除一个结点,刚开始的处理与二叉排序树一样;同理,在红黑树中删除结点的处理方式和"二叉排序树的删除"一样。
2025-07-04 00:31:05
162
原创 7.8.红黑树的定义和性质(红黑树英文缩写为RBT)
如上述图片,红黑树相比于二叉排序树:红黑树是二叉排序树的一种优化,因此红黑树必定是二叉排序树,二叉排序树具有"左子树中每一个结点的值<根结点的值<右子树中每一个结点的值"的特性,因此红黑树也有该特性。此外,为了保证查找、插入、删除操作的效率,红黑树还具有上述图片描述的特性红黑树相比于平衡二叉树:平衡二叉树必须满足任何一个结点的左、右子树的高度之差不超过1,红黑树就没有这个特性。
2025-06-24 12:07:08
1047
原创 7.6.平衡二叉树(英文缩写为AVL树)
1.平衡二叉树简称平衡树(AVL树,该缩写来源于平衡二叉树的发明人的名字简称);2.结点的平衡因子=左子树高-右子树高;3.以上述图片左下角的二叉树为例,结点50的左子树的高度为2,右子树的高度为3,因此结点50的平衡因子为2-3即-1;4.显然如果一棵二叉树是平衡的,那么各个结点的平衡因子只可能是-1、0、1,也就是绝对值不超过1,如果二叉树中有任何一个结点的平衡因子绝对值超过1,那么这棵二叉树一定不是平衡二叉树;//平衡二叉树结点int key;
2025-06-24 11:54:30
1119
原创 7.5.二叉排序树(英文缩写为BST,又名二叉查找树)
如上图,二叉排序树又名二叉查找树,英文缩写为BST,需要满足的特性:左子树中每一个结点的值<根结点的值<右子树中每一个结点的值(有的题目会要求"左>中>右"),如上述图片中左下角的树就是二叉排序树,左子树和右子树又递归地各是一棵二叉排序树,基于"左子树中每一个结点的值<根结点的值<右子树中每一个结点的值",如果中序遍历二叉排序树,可以得到一个递增的有序序列,因为中序遍历就是先遍历左子树,再遍历根结点,最后遍历右子树,
2025-06-24 11:45:49
644
原创 15.数据类型的作用
变量是一个存储数据的空间,这个空间中具体存整数、小数、字符等由数据类型决定。以上述图片为例,定义了一个变量a记录数据56,那么在内存中就有一个存储数据的空间,在这个空间中存的是56的二进制111000,不仅仅是这样,在内存中还会用如下图这么大的空间存储:如上图,前面的空间就算用不上,也会用0补齐,如下图:如上图,之所以用0补齐,是因为数据类型int,int在Windows操作系统中占4个字节,也就是32个0101,如下图:如上图,在计算机中所有的数据都是以二进制的形式进行存储,在二进制中每一个0或者1称之为
2025-06-20 11:55:30
470
原创 14.变量的注意细节
int main()//变量之间用逗号分隔,最后一个变量后要写分号//此时表示同时定义了3个变量b、c、d,这3个变量都是int型,里面能存整数,其中b记录10,c记录20,d记录30//运行结果为b=10//运行结果为c=20//运行结果为d=30return 0;如上述代码,一条语句可以定义多个变量,但可读性差,比如变量d一眼看不出是什么类型,还需要往前找才能得知是int型,因此建议定义变量时一行只定义一个变量。
2025-06-20 11:51:07
419
原创 13.变量
可以把变量理解为一个"盒子",把数据放入这个"盒子"中进行存储,在使用的时候直接获取"盒子"中的数据即可,而且"盒子"中的数据可以随时进行更改,从而实现"变"的效果。注:变量是存储时据的"盒子",不是里面的数据,我们只是把变量放到这个"盒子"中进行存储而已以上述图片为例,定义了一个变量int a;,变量就是存储数据的"盒子",那么这个"盒子"装整数还是小数呢?又或者是其他数据类型呢?而这个"盒子"的大小又是多少呢?
2025-06-20 11:47:46
320
原创 8.1.排序的基本概念
如上图,所谓排序,就是把杂乱无章的一堆数据元素按照一定的规则如递增重新排列一遍,总而言之经过排序算法之后,要保证最终的一堆的数据元素的关键字是有序的,在之前的章节中说过(详情见"7.1.查找的基本概念"),各个数据元素的关键字是唯一的,但在排序算法中难免会遇到关键字相同的情况,比如王者荣耀里的荣耀战力排行榜,其中荣耀战力的值为关键字,荣耀战力会遇到相同的情况;如上图,有一个网站(电脑/手机上的浏览器都可以),来自于美国的旧金山大学,这个网站可以帮助我们可视化地理解很多算法,如下图:如上图,
2025-06-10 21:40:44
497
原创 7.4.分块查找
步骤一:在索引表中确定待查记录所属的分块(注:判断待查记录在哪一个分块,可以通过顺序查找,也可以通过折半查找,因为索引表中保存的元素是有序的,并且索引表是用数组的形式即顺序存储来实现的,所以对索引表的查找也可以使用折半查找)步骤二:在所属的分块内进行顺序查找(因为分块内的元素大多是乱序存放的,所以只能采取顺序查找来依次往后对比查找)以上述图片为例,该例中查找表里的数据元素采用了顺序存储,如果该查找表需要进行元素的增加或者删除时就会效率很低,因为比如要增加一个数据元素,该数据元素的值是8,
2025-06-10 21:35:58
930
原创 7.3.折半查找(二分查找)
对于一个折半查找,如果查找区间为[low,high],中间指针mid = ( low + high ) / 2,且每次对比的是mid指针指向的数据元素,那么在查找判定树中对于任何一个结点都有"在同一个根结点下,右子树结点数-左子树结点数=0或1(右子树结点数不小于左子树结点数)"如果包含失败结点,那么折半查找(二分查找)的树高h为h+1。
2025-06-10 21:28:18
1279
原创 7.2.顺序查找
线性表分为顺序储存和链式存储,但无论是哪种存储方式,顺序查找都是适用的。以上述图片为例,比如要查找关键字43,只需要从线性表的第一个元素开始,依次往后找,最终找到了43,如下图:上述图片中的代码解读:查找表采用顺序表实现,即数据元素采用顺序存储(注:查找表也可以采用单链表、双链表等链式存储,只是Search_Seq函数里的for循环和return语句会有差别)结构体SSTable采用了动态数组(类似Java的ArrayList集合,动态数组不是链表,动态数组在优快云收藏里有详解)的方式,其中elem指针会
2025-05-22 21:31:06
723
原创 7.1.查找的基本概念
1.查找:找到所需的数据;2.查找表:用来存储数据的数据结构;3.查找表可以是线性结构、树形结构、图结构(网状结构),因此查找表由数据元素构成;4.查找表并不是特定的数据结构,它只是对于要执行查找操作的这个数据结构的统称,所以查找表并不是新的数据结构;5.关键字:用来唯一区分各个数据元素的数据项->例一:如上图,给出了一张表,表的内容是成绩信息,每个同学会有一个学号,这个学号都是不重复的,所以可以把学号这个数据项作为区分各个数据元素的关键字,姓名无法作为关键字,因为姓名可能重复,比如上述表中的"铁柱"例二:
2025-05-22 21:25:25
600
原创 6.12.有向无环图描述表达式
如上图,第5个生效的运算符 * 是基于第3个生效的运算符 * 得到的结果和第4个生效的运算符 * 得到的结果,所以第5个生效的运算符 * 要放在倒数第三层。如上图,第6个生效的运算符 * 是基于第5个生效的运算符 * 得到的结果和第2个生效的运算符 * 得到的结果,所以第6个生效的运算符 * 要放在倒数第四层。第5个生效的运算符 * 是基于第4个生效的运算符 * 得到的结果和第3个生效的运算符 * 得到的结果,所以第5个生效的运算符 * 要放在倒数第四层,
2025-05-22 21:14:01
1066
原创 12.输出常量的两个小扩展
题目如下:解答如下:注意:前面的占位符要与后面填入的数据一一对应,因为后面填入的数据是依次填补到占位符的,第一个数据填补到第一个占位符中,第二个数据填补到第二个占位符中,以此类推。上述代码中虽然分成两行写printf语句,但最终的结果写在了同一行,如果要实现换行,该怎么写呢?其实使用换行符即可。此时用的是Windows操作系统,所以换行符是\r\n,修改结果如下:三.有关Windows操作系统的换行符\r\n:1.历史演变:如上图,在以前的机械打印机中,换行的操作是先把纸推回去,
2025-05-18 11:33:05
905
原创 11.输出常量
输出常量,很明显要用到printf函数,很多人会认为打印一个整型常量或打印一个实型常量等直接写printf(23)、printf(18.123)即可,实际上这么写不对,原因就涉及到printf函数了。占位符:通俗地理解就是在打印的时候用占位符先占个位置,之后再用真实的数据填补。
2025-05-18 11:26:01
870
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1