自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 [C++初阶] :从C到C++

从C到C++之前的基础准备知识

2025-03-18 16:16:30 2726 2

原创 两分种解决:xshell终端delete键无效

在使用终端输入错误时,发现自己按下delete打出一些奇怪的字符如自己的delete无效是一件很烦恼的事情。

2025-03-01 11:20:14 207

原创 两分钟解决 :![rejected] master -> master (fetch first) , 无法正常push到远端库

然后再进行push就可以把上次提交失败的内容提交上去了。若你在git上修改了如README.md的文件。将线上、线下代码进行合并就可以很好的解决这个问题。在git push的时候莫名遇到这种情况。README.md文件的,所以导致。(必要的时候可以用sudo提权)(必要的时候可以用sudo提权)远端仓库git和本地不同步。

2025-01-13 21:07:32 518

原创 面试经典问题 —— 链表之返回倒数第k个节点(经典的双指针问题)

第一个指针先移动k步,然后第二个指针再从头开始,这个时候这两个指针同时移动,当第一个指针到链表的末尾的时候,返回第二个指针即可。使用双指针方法的关键在于理解何时以及如何移动指针,这通常依赖于当前指针所指向元素之间的关系。first指针是快指针(fast),second指针是慢指针(slow)显然,时间复杂度为O(N)空间复杂度为O(1)从这道题可以学到双指针的基本解题场景。无疑,本题是很简单的。

2025-01-02 14:55:06 375

原创 面试经典问题 —— 最大/小前K个数问题(top - K)问题

arr[i]>=heapTop:arr[i] 不可能属于第 k 小数(已有 k 个元素在堆中),直接丢弃 arr[i];arr[i]

2024-12-25 15:18:37 490

原创 两分钟解决:vscode卡在设置SSH主机,VS Code-正在本地初始化VSCode服务器

【代码】两分中解决:vscode卡在设置SSH主机,VS Code-正在本地初始化VS Code 服务器。

2024-12-24 10:25:07 4732 7

原创 各种常见排序

在生活中随处可见排序,例价格排序 :在数据结构和算法中,排序是非常基本且重要的操作之一:提高搜索效率:排序后的数据可以使用更高效的搜索算法,例如二分查找,这比线性查找要快得多。对于大规模的数据集,这一点尤为重要。优化资源利用:排序可以帮助更好地管理资源,比如数据库中的索引机制依赖于排序来快速检索信息。简化数据分析:当数据是有序的时候,分析起来更加容易,比如找到最大值、最小值、中位数或进行频率分布统计等操作都会变得简单直接。实现原理 :它的实现原理类似于人们如何整理一手扑克牌。

2024-12-23 14:26:10 247

原创 平衡的二叉搜索树 —— 红黑树

红黑树:插入和删除操作的时间复杂度也是O(log n),但这些操作涉及的重新着色和旋转次数较少,因此在实际应用中,红黑树的插入和删除操作通常更快。AVL树:插入和删除操作的时间复杂度也是O(log n),但这些操作涉及的旋转次数较多,因此在实际应用中,AVL树的插入和删除操作通常较慢。AVL树:查找操作的时间复杂度也为O(log n),但由于AVL树的高度严格平衡,因此在最坏情况下,AVL树的查找性能优于红黑树。if (parent = pparent->_left) // 说明叔叔节点在右边。

2024-11-11 10:46:56 569

原创 平衡的二叉搜索树 —— AVL

3. 自平衡机制:当向AVL树中插入或删除节点后,如果树失去了平衡,即某个节点的平衡因子不再是-1, 0, 或1,则通过一系列旋转操作来恢复平衡。由于AVL树要保证绝对平衡,所以在实际应用中,如果只是侧重查找可以用AVL树,如果要经常的增删,那么用相对平衡的空黑树。AVL树是绝对平衡,如果经常插入经常要进行旋转,旋转是有消耗的 ,所以STL map和set的底层其实是相对平衡的。2.插入后等于 +-1 , 说明整棵树的高度变化了,要算祖先的平衡因子(插入只影响祖先的平衡因子)

2024-11-06 08:59:56 553

原创 特殊的一种树 —— 二叉搜索树

就如性能分析而言,当插入的是递增或递减的序列,二叉搜索树退化,时间复杂度O(N)所以 ,人们通过旋转的方法,保证了树的高度平衡,使其所有基本操作的时间复杂度保证为O(logN),这就是著名的。要删除的节点有两个子节点,通常的做法是找到其右子树中的最小节点(或左子树中的最大节点),用该节点替换要删除的节点,然后删除这个最小(或最大)节点。新节点作为这个空指针指向的新子树的根节点。要删除的节点只有一个子节点,将该节点父节点的指针重新链接到它的子节点上。要删除的节点没有子节点(叶子节点),可以直接删除。

2024-11-01 21:57:13 269

原创 非线性结构 —— 树

红黑树 : 节点由红色和黑色两种颜色构成,保证 根节点为黑色,没有连续的红节点,最长路 径最多是最短路径的两倍(达到相对平衡)此时为了保证二叉搜索树能够一直有 O(logN)的效率,我们对退化的二叉搜索树进行旋转这就有了两大平衡搜索树(AVL树和红黑树)中序遍历(In-order):遍历左子树,访问根节点,遍历右子树(对于BST,结果是有序的)。对于每个节点,左子树的所有节点值小于该节点,右子树的所有节点值大于该节点。第i层,最多有2^(i-1)个节点。

2024-10-31 10:42:58 679

原创 线性结构——队列

队列(Queue)简介队列是一种数据结构,遵循先进先出(FIFO)的原则。它的基本操作包括入队(enqueue)、出队(dequeue)和查看队头元素(peek)。在队列中,最早添加的元素最先被移除。基本操作1. 入队(Enqueue):将元素添加到队尾。2. 出队(Dequeue):移除并返回队头元素。3. 查看队头元素(Peek/Front):返回队头元素但不移除它。4. 检查队列是否为空:判断队列中是否有元素。特点与应用FIFO结构:最早进入的元素最先被处理。排队管理:队

2024-10-30 11:33:00 302

原创 线性结构——栈

定义栈时要定义 栈顶top和capecity(其实top就是顺序表的size,也是用下标搞事情)。栈有着先进后出的顺序所以,要通过获取顶打印,而不是想当然的打印。用链表实现栈,由于栈只能从栈顶进入,要尾插就比较麻烦,所以我们用。在C++的STL 种栈作为适配器,是封装了双端队列实现的。注意:栈和顺序表很像,栈就是一个只能从一边进出的顺序表。只允许在固定的一段插入和删除的数据结构。如图:尾指针找不到前一个节点。

2024-10-24 13:45:00 156 3

原创 线性结构——链表

ex,next要存放下一个节点的地址,所以是Node*类型,头节点也是要放下一个节点的位置,所以说是Node*类型。在有节点创建的情况下,这时tail表示的是原链表的末端。链式结构创建新节点不需要传一个地址的,直接一个值解。tail储存的地址 (而tail储存的地址就是上一个节点储存的地址)tail -> next ,表示的是tail储存的地址,一个一个的把malloc出来的节点消除了。链表由头节点控制,一些可能改变头的操作。链表以节点为元素构成,一个节点一部分储存自己的数据,一部分存储下一个节。

2024-10-07 13:44:57 544

原创 线性结构——顺序表

缓存预加载概念:{访问数据时不会只加 (从内存中到缓存中)删除:pop ( 爆掉了 ) | | erase(计算机删除)顺序表在物理上是连续的,物理上连续有了这个条件,1. 这些size(有效数据个数),acpicity(空间容量)只是一个”显示“的作用。4. 注意:顺序表(数组类结构)不用free删除数据,而是直接操纵size--。插入数据时,因为要移动所以,时间复杂度为O(N)顺序表:顺序表其实就是数组(一般作为接口(类似于函数)放在头文件中)

2024-09-26 00:25:45 924

原创 初识时间复杂度和空间复杂度

从树的深度入手就是O(logN)遍历所有节点就是O(N);1.只保留最高项(把N当无穷大,其他的倍数啥的都可以忽略)记作 O()空间复杂度不研究代码占用了多少byte位(太难算了没有意义)技巧:面对稍微有一点复杂的程序,真正的高手在算时间复杂度时。2.若只有常熟项,则时间复杂度为O(1)这种的复杂度就是O(1),他只使用了一个固定大小的变量。时间复杂度是指一个算法运行次数;递归的时间复杂度其实就是子函数调用的次数。有关于时间复杂度常见的题目:8页。几个空间复杂度的题目:10页。

2024-09-16 09:26:33 344

原创 一些简单,入门的算法和解题技巧

有a+b→c 把a,b理解为固定的一个数是愚蠢的(因此很多情况会影响在运行中a,b,c的值的改变我们千万不能把它们当成固定的值了,这是新手很容易犯的错),要吧a当成第一个加数,把b当成第二个加数 并不断的给他们附上新值。b是小的数(b要做被除数应该小一些)在写这个题目时我有有一个逆天的思路:遍历4位的数字然后去判断aabb的数字,然后打。而左斜对角线是i+j= n-1 (固定的一个数)(n为你需要输入的规模)对于这样一个特殊的数组,我想到的是一个二维的二分查找,但是时间复杂度O(NlogN)

2024-09-03 15:25:14 640

原创 C语言重头戏之指针

分析: int 是函数的返回类型 , 由于后边是函数的特征所以( *pf3 )是指向函数的指针 pf3为变量名 , ( int x , int y )是函数参数类型。用来函数形参的创建( 二维数组的元素是一维数组,函数形参创建不是正好要一个首元素地址吗 )下图的int (*p)[5] = int arr[][]我们可以给指针赋值NULL NULL是C语言中定义的一个标识符常量,值是0,0也是地址,这个地址是无法使用的,读写该地址会报错。

2024-08-23 12:41:29 490

原创 关键字,其他知识

用“ 1en "可表示10的n次方( 1 en = 1 * 10^n( 这里的^不是异或) )注意:全局变量不建议大量的去使用,全局变量所有人都看得到,乱改后果很严重,因此全局变量一般是常量。指针变量解引用指向的地址是不可以改变的,而指针变量p本身的地址可以改变。指针变量p本身的地址不能改变,而指针变量解引用指向的地址是可以改变的。不要忘记各个东西(特别是占位符 ,类型的限制)的限定(要细节一点.)ASCII是 数字到字符的映射, 但是ASCII的值是英文。1.先把要添加的文件复制到当前项目。

2024-07-19 22:28:01 868

原创 数组的应用

问题:ex 在第一次循环i=0时,里头arr【0】先就已经进行精准定位了 ,后续的scanf输入就是给这个arr【0】{即数组中的第一个}赋值。ex set_arr1(arr1 , n)【为了不产生调用歧义这个n表示调用的数组元素个 数】(arr1是数组的首地址)注意了:用指针模拟的二维数组并不连续,真正的二维数组是连续的因 此这个方法只是一个模拟数组的作用。对应法则是: 第一个数对应下标0以此类推( 若该数组有n个元素 最后 一个数对应的下标是n-1)

2024-06-30 17:29:41 784

原创 常见的占位符和类型

2.%#o,%#x(用X输出大写字母), 这里井号的作用就可 以让八进制前缀加上0,十六进制前缀加上x。这两个(*)的值,通过printf的两个参数(6,2)结构体:是除char,short,int,long,等描述定义复杂对象的自定义类型。写结构体的原则,就是零散的空间集中在一起(对齐的同时减少空间浪费)%p是以16进制输出地址,而%d其实也可以输出地址但。枚举常量: { }中的内容是有值的,这个值系统已经初始化(自己也可以以自己。1.字符串的地址不是一起的而是和数组的地址一样()每个都是连续的。

2024-06-24 18:08:20 1268

原创 C语言中常用的函数

srand常用的是:srand((unsigned int)time(null) )){这是要强制转化类型}注意:在字符串中时strlen不记录\0,但signof计算\0,应为\0本来就占一个字符是字符。注意:strlen一遇到遇到\0会歇菜的(ex:strlen(I love you)=1 有空格在搞怪 )为char *类型) ,图二为传址调用(二级指针)。变式:strncat(Strings n Catenate(横向链接) )函数, n的作用同上。

2024-06-17 19:26:57 1013 2

原创 函数的基本概念

本文是关于函数的基本概念

2024-06-10 18:36:42 813 1

原创 常见语句的使用

注意:在使用循环语句的时候,重制数据是一个非常关键的细节(若数据需要重制)注意:if里头的判断是很严格的,ex double类型的10.0就是不等于int类型的10。switch的case选项很特别,有些生活中的实际问题我们可以用一些数字来。技巧:for循环的判断条件,可以不着急去写(判断准确后再写也不迟)。注意:不要只知道用for了在一些你不需要写三班斧的时候就可以用用其他的循环。对于复杂的判断 可以嵌套(嵌套在if 或else中都可以)1.(初始化,判断,调整变量)这样写是错的里头用分号。

2024-05-23 17:29:09 747 1

原创 关于内存(初步了解)

如右边,内存这样放表示了是小端。补充知识点:4个二进制位可以表示表示任意一个16进制的数,所以“00”这两个16进制数。例:第一次malloc申请的地址小于以后malloc申请的地址。例:调用函数函数的地址越来越低。4.栈空间内存不大(8mb,到10mb)cpu对于提取各种空间的速度(依次递减)栈区的内存地址从高地址到低地址使用。关于栈区的内存分析(有图)2.谁创建的早谁用高地址。3.整个空间是线性的。

2024-05-12 14:57:44 238 1

原创 操作符(C语言)

背景:由于cpu只能计算加法所以科学家没发明了补码实现了(1-1 == 1 +(-1))这样把减法弄成了加法。操作符(不要加引号) 判断相等是==,而=是赋值。a ^ a =0(一模一样的所以说全相同全变成0了)!比较重要的:优先级 (<< , >> )>( == ,注意 : 位运算的优先级极低 , 甚至比 判断 “==” 还低 (被坑过)两个对应的二进制位进行运算两个同时为0才得到0,否则为1。

2024-05-07 17:03:46 127 1

原创 占位符和类型的一些技巧(C语言)

2.%#o,%#x(用X输出大写字母), 这里井号的作用就可 以让八进制前缀加上0,十六进制前缀加上x。这两个(*)的值,通过printf的两个参数(6,2)结构体:是除char,short,int,long,等描述定义复杂对象的自定义类型。写结构体的原则,就是零散的空间集中在一起(对齐的同时减少空间浪费)%p是以16进制输出地址,而%d其实也可以输出地址但。枚举常量: { }中的内容是有值的,这个值系统已经初始化(自己也可以以自己。1.字符串的地址不是一起的而是和数组的地址一样()每个都是连续的。

2024-04-29 22:00:01 992 4

空空如也

空空如也

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

TA关注的人

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