自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 5分钟帮你完全搞定!!![动画+注释详解] 数据结构 - 选择排序

选择排序因其简单和原地排序的特性,在小规模数据或内存使用受限的情况下还是有一定用途的。但由于其较差的时间效率,它通常不适用于处理大量数据。在需要处理大数据集时,更高效的排序算法如快速排序、归并排序或堆排序更为适宜。

2024-04-29 17:07:47 1427 9

原创 [动画+注释详解]数据结构 - 直接插入排序

直接插入排序在最好情况下非常高效,适用于数据已经部分排序的场景。然而,在最坏和平均情况下,它的效率较低,特别是对于大规模数据。其主要优点是实现简单,排序稳定,且在数据规模较小或基本有序的情况下表现良好。

2024-04-29 00:13:14 1183

原创 数据结构 - 队列 [动画+代码注释超详解],萌新轻松上手!!!

不过整体上使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数组头上出数据,效率会比较低。下面我将用链表的结构来实现队列。

2024-04-27 20:20:50 1332 2

原创 LeetCode - LCR 008.长度最小的子数组

从 right1 这个元素开始,往后找满足left2 元素的区间(此时right1 也有可能是满 ⾜的,因为left1 可能很⼩。但是如 果继续像⽅法⼀⼀样,重新开始统计第⼆个元素( left2 )往后的和,势必会有⼤量重复 的计算(因为我们在求第⼀段区间的时候,已经算出很多元素的和了,这些和是可以在计算 下次区间和的时候⽤上的)。让滑动窗口满足:从 i 位置开始,窗口内所有元素的和小于target (那么当窗口内元素之和 第⼀次大于等于目标值的时候,就是i 位置开始,满足条件的最小长度)。

2024-04-26 23:53:31 356 2

原创 数据结构 - 栈

是一种重要的抽象数据类型(ADT),也是一种特殊的顺序表,用于存储有序的元素集合。它的最大特点是后进先出(Last In First Out, LIFO)。这意味着在这个数据结构中,最后添加的元素将是第一个被移除的。其中进行数据插入的和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守 后进先出(LIFO)的原则栈的插入操作叫做 进栈 / 压栈 / 入栈 (入数据在栈顶)栈的删除操作叫做出栈。(出数据也在栈顶)

2024-04-26 19:52:04 1217 3

原创 LeetCode - 611.有效三角形个数

【代码】LeetCode - 611.有效三角形个数。

2024-04-25 23:39:56 202

原创 LeetCode - LCR 179.查找总价格为目标值的两个商品

【代码】LeetCode - LCR 179.查找总价格为目标值的两个商品。

2024-04-25 19:03:35 308 4

原创 数据结构 - 链表详解(二)—— 带头双向循环链表

首先,我们还是需要先定义一个结点类型,与单向链表相比,双向链表的结点类型中需要多出一个前驱指针,用于指向前面一个结点,实现双向。//存储的数据类型//数据域//前驱指针//后继指针}ListNode;2. 链表节点的创建实现步骤:内存分配这行代码通过malloc函数为一个新的ListNode结构体分配内存。确保分配足够的内存以存放一个ListNode结构体。内存分配校验这个条件判断用来检查malloc是否成功分配了内存。如果malloc返回NULL,表示内存分配失败,可能是因为系统内存不足。

2024-04-25 17:20:44 2039 2

原创 数据结构 - 链表详解二 - 无头单向非循环链表

/ 定义数据类型为整型,用SLTDataType代替int//以提高代码的可读性和可维护性// 定义单向链表的节点结构// 数据域:存储节点的数据,这里为整型数据// 指针域:指向链表中下一个节点的指针。

2024-04-24 23:04:34 680

原创 数据结构 - 链表详解一 - 链表的介绍

1. 带头与不带头的链表带头节点的链表定义:带头节点的链表拥有一个特殊的节点,通常称为“头节点”或“哨兵节点”,位于链表的最前端。这个节点不存储任何实际意义的数据(或者说其数据部分通常被忽略),它的主要作用是简化链表操作,特别是插入和删除操作,因为这样链表的每个节点都有一个前驱节点,使得链表操作中的特殊情况(如插入到链表头部)变得统一。优点:操作简化。每个节点都有相同的插入和删除操作逻辑,无需对第一个元素特殊处理。缺点:轻微的空间浪费(一个额外的节点)和初始化复杂性。不带头节点的链表定义。

2024-04-24 18:25:28 825

原创 数据结构 - 顺序表实现通讯录

contact.c文件。contact.h文件。

2024-04-23 23:36:26 326

原创 LeetCode - 11.盛最多水的容器

此时容器的底是最大的,接下来随着指针向内移动,会造成容器的底变小,在这种情况下想要让容器盛水变多,就只有在容器的高上下功夫。这种情况下我们想要让指针移动后的容器面积增大,就要使移动后的容器的高尽量大,所以我们选择指针所指的高较小的那个指针进行移动,这样做可以保留较高柱子的边界,同时增加找到更高柱子并提升容器高度的可能性。利用双指针的思想,定义一个left和reght,left指向首部,right指向尾部,计算当前两个指针所对应的高度构成容器的体积。持续进行容积的计算,并根据上述逻辑移动指针,直到。

2024-04-23 16:45:34 408 3

原创 LeetCode - 150. 逆波兰表达式求值

想要解决该题目,我们首先需要知道什么是逆波兰表达式,逆波兰表达式是一种后缀表达式,所谓后缀就是指算符写在后面。

2024-04-22 22:06:06 385

原创 数据结构 - 顺序表

/ 定义SLDateType为int类型,这是顺序表中将要存储的数据类型// 定义一个结构体,用来表示顺序表// 声明了一个指向动态分配数组的指针,这个数组用于存储顺序表中的元素int size;// 记录当前顺序表中已经存储的元素的数量,即顺序表的当前大小// 记录顺序表分配的存储容量,即数组的最大可能大小} SeqList;在C语言中使用typedef来定义新的数据类型名有多个原因,尤其是在实现如顺序表这样的数据结构时。SLDateType1. 抽象数据类型通过定义SLDateType。

2024-04-21 23:15:44 2116

原创 LeetCode - 面试题 08.06. 汉诺塔问题

思路和上面是一样的,我们把 n 个盘子也看成两个部分,一部分有 1 个盘子,另一部分有 n - 1 个盘子。,只有一个盘子,很简单,直接把它从 A 中拿出来,移到 C 上;这时候我们就要借助 B 了,因为小盘子必须时刻都在大盘子上面。

2024-04-21 20:06:24 252 1

原创 LeetCode - 283.移动零

【代码】LeetCode - 283.移动零。

2024-04-20 23:35:09 279

原创 C++ - STL详解(七)— stack和queue的介绍及使用

头文件:#include 一. 使用默认的适配器定义栈//这里,T 是你想在栈中存储的数据类型。例如,如果你想创建一个存储整数的栈,你可以这样定义:二. 使用特定的适配器定义栈std::stack使用一个底层容器进行封装,默认情况下是std::deque,但是你也可以指定其他容器,如或std::list。//第一个int:这是栈中将要存储的数据的类型。在这个例子中,栈将存储 int 类型的数据。//std::vector:这是栈的底层容器类型和该容器存储的数据类型。

2024-04-20 21:44:19 667

原创 C++ 模板详解——template<class T>

通过使用函数模板,可以写出更通用、更灵活的代码,同时减少重复和错误。编译时的类型检查提供了比C语言中的宏更高的类型安全性。函数模板在C++标准库中被广泛使用,例如在STL(标准模板库)的各种算法和容器中。这使得STL非常强大,因为它不仅能够处理几乎任何类型的数据,还保持了代码的紧凑和高效。

2024-04-20 14:12:45 2551

原创 C++ - STL详解—vector类

跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,为什么不能用cout<< v1 <<endl直接访问呢?C++标准库中的vector没有重载<<运算符来支持直接打印。因此,直接尝试用cout打印vector会导致编译错误。:vector<char> strV能不能替代string str,它们两个都是字符数组,也都能动态增长呀?可以替代吗?答案是否定的:他俩结构上有所不同string和的处理和终结字符\0的方式确实有所不同。\0C++ 中的类自动处理字符串的终止字符\0。

2024-04-19 23:54:56 995

原创 C++ - STL详解— string类(二)

对于STL的学习,大家更多的是去查官方文档,我觉得这是一种很高效和系统的学习,所以下面我会把对应的文档内容都给大家翻译出来,以方便大家学习STL,共勉进步,加油加油!!

2024-04-18 23:41:37 703

原创 C++ - STL详解— string类(一)

函数名称size文档解释:代码语法: 代码运行画图解释:结论:size和length的用法是完全一样的 文档解释: 代码语法: 代码运行画图解释: 但是在Linux系统下,当n>capacity时,是开多少给多少容量 作用:当知道自己需要多少空间的时候,可以提前开好空间,避免不断的增容,减少代价。文档解释: 代码语法: 代码运行画图解释:n>当前字符串的长度的情况:自定义初始化的情况: n

2024-04-16 17:11:43 779 1

原创 C++ - 面向对象(二)

main方法中创建了Date对象d,而d中包含4个成员变量,其中_year, _month, _day三个是内置类型成员,销毁时不需要资源清理,最后系统直接将其内存回收即可;而_t是Time类对象,所以在d销毁时,要将其内部包含的Time类的_t对象销毁,所以要调用Time类的析构函数。但是: main函数中不能直接调用Time类的析构函数,实际要释放的是Date类对象,所以编译器会调用Date类的析构函数,而Date没有显式提供,则编译器会给Date类生成一个默认的析构数,

2024-04-14 23:29:07 773

原创 C++ - 面向对象(一)

代码语法//类体:由成员变量和成员函数组成//注意后面的分号其中class为定义类的关键字,className为类的名字,{}中为类的主体,注意定义结束时加上后面的分号。类中的元素称为类的成员:类中的数据称为类的属性或者成员变量,类中的函数称为类的方法或者成员函数。1、声明和定义全部放在类体中。需要注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。2、声明放在头文件(.h)中,定义放在源文件(.cpp)中。在类体外定义成员,需要使用::作用域解析符指明成员属于哪个类域。

2024-04-13 23:32:36 529

原创 C/C++的内存管理

栈帧最主要的作用就是存储局部数据。

2024-04-09 23:30:52 509

原创 C++ - 第一节

在C/C++中,变量、函数和类都是大量存在的,这些变量、函数和类的名称都将作用于全局作用域中,可能会导致很多命名冲突。要解决该问题,C++祖师爷定出来一个命名空间,是一个域我们在C语言中经常使用到输入和输出,但是在C++中的输入和输出跟C语言的不太一样C++的输入输出不需要增加数据格式控制,它能自动识别类型输出输入 在C语言中有标准输入输出函数scanf和printf,而在C++中有cin标准输入和cout标准输出。在C语言中使用scanf和printf函数,需要包含头文件stdio.h。在C+

2024-04-03 09:36:14 350 2

原创 数据结构-Top-K问题

1。

2024-03-29 10:23:53 79

原创 数据结构 - 用队列实现栈/用栈实现队列

我们要借用栈的性质也实现一个出数据,和入数据的功能,该怎么样实现的呢?创建两个栈,一个左栈,一个右栈。左栈用来插入新数据,右栈用来出数据。队列是遵循队头出数据,队列进数据。

2024-03-27 09:36:33 180

原创 数据结构 - 循环队列

初始化循环队列。

2024-03-27 09:06:15 98

原创 Linux - 第五节

以管理员的身份,去修改etc/sudoers配置下的文件,添加白名单。g++ - 既能用来编译C语言,也能用来编译C++sudo用不了 - 新建的普通用户。gcc - 只能用于编译C语言。

2024-03-26 15:55:53 128

原创 Linux - 第四节

h/j/k/l:左,下,上,右,进行移动->h最左边,l最右边,j向下跳,kKing国王,高高在上,向上。(n)r:对光标字符+之后的所有字符进行批量化替换。n+shift+g(nG):定位光标到任意行。(n)p:粘贴(n重复行)到光标所在行下一行。shift+g(G):定位光标到最结尾行。(n)x:对光标字符之后的字符进行删除。(n)yy:复制光标所在行(n行)yum install 软件名。(n)dd:(n行)剪切,删除。yum remove 软件名。set nonu 取消行号。

2024-03-25 23:07:46 368

原创 Linux - 第三节

退出用exit / ctrl+d。仅单纯的进行身份变化。依旧处于普通用户里面。进行重新登录更改身份。

2024-03-24 23:19:28 486

原创 Linux - 第三节知识点

nano。

2024-03-22 23:40:37 124

原创 Linux - 第二节知识点

无论是什么重定向,如果要写入的文件不存在,它会先创建一个3。不输出多行空行,当有多行空行时,就会被压缩成一行空行。会对输出结果所有行进行编号。会对输出结果非空行进行编号。cat -b 文件名。cat -s 文件名。cat -n 文件名。

2024-03-21 23:05:18 572

原创 Linux - 第一节知识点

alt + enter:让xshell自动全屏和取消全屏。显示当前命令行在进行操作时所处的目录在哪。显示当前目录下所有的文件列表。

2024-03-20 23:20:17 316

原创 LeetCode - 删除有序数组中的重复项

如果数组长度为0,即数组为空,则直接返回0,因为没有元素要处理。

2024-03-19 22:02:19 106

原创 数据结构 - 时间复杂度

1。

2024-03-17 18:50:24 76

原创 C语言 - strlen函数

strlen函数是用来计算字符串长度的,从字符的首地址开始遍历,以 '\0' 为结束标志,然后将计算的长度返回,但是计算的长度不包含'\0'。

2024-03-16 15:19:11 1388

原创 C语言 - 指针

1。

2024-03-15 20:49:56 110

原创 C语言 - 内存函数

C语言 - 内存函数。

2024-03-12 13:23:01 318

原创 动态内存管理

/在栈空间上开辟四个字节//在栈空间上开辟10个字节的连续空间1. 空间开辟大小是固定的。2. 数组在申明的时候,必须指定数组的长度,它所需要的内存在编译时分配。但是对于空间的需求,不仅仅是上述的情况。有时候我们需要的空间大小在程序运行的时候才能知道, 那数组的编译时开辟空间的方式就不能满足了。这时候就只能试试动态存开辟了。动态内存分配(Dynamic Memory Allocation)就是指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法。

2024-03-11 19:14:05 946

空空如也

空空如也

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

TA关注的人

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