- 博客(18)
- 收藏
- 关注
原创 零基础学C++—— 类和对象(2) 超详细!!
在以上代码中,如果移除了 ~Animal() 析构函数的定义,当 main() 函数执行完毕,Animal a;离开其作用域时,编译器生成的默认析构函数会被调用。尽管这个默认析构函数没有输出任何信息,但它确实被执行了。无论你是否显式定义析构函数,对象 a 所占用的内存(在这个例子中是栈内存)都会在对象生命周期结束时由系统自动释放。析构函数的存在主要是为了允许程序员执行自定义的清理操作,比如释放动态分配的内存、关闭文件等。
2024-12-19 15:28:54
640
1
原创 零基础学C++—— 类和对象(1) (超详细!!!)
成员变量(Attributes/Properties):这些变量用于存储类的状态或数据。成员变量可以是任何数据类型,包括基本数据类型(如int, float, char等)、复合数据类型(如数组、结构体等),甚至是其他类的对象。成员变量可以是公有的(public)、私有的(private)或受保护的(protected),这决定了它们在其他类或对象中的可见性和可访问性。成员函数(Methods):成员函数定义了可以在类的对象上执行的操作。
2024-11-27 11:14:32
984
原创 C++入门 二(函数重载,引用,超详细!!!)
引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和引用的变量共用同一块内存空间。下图的两个函数就构成重载,因为它们的参数个数不同,但是这样使用会引发调用歧义,就是不知道应该调用哪个函数。改变上面任意一个变量的值,它们的值全都会改变,就像是铁牛吃了饭,那黑旋风和李逵肯定都吃了饭。↓这个不是引用而是把b赋值给c,同时改变了a的值,这个与指针不一样,指针能改变指向。这里虽然不能改变c的值,但是可以通过改变b的值从而改变a的值。引用就像是一个人的外号,就像李逵外号黑旋风,
2024-09-11 08:22:36
706
原创 C++入门 一(命名空间,缺省参数,超详细!!!)
在C++中,需要使用namespace关键字,后面跟命名空间的名字,然后接一对 { } 即可,{ } 中即为命名空间的成员。下面是一个简单的例子:
这段代码定义了一个简单的二叉树节点结构体,其中包含指向左子树和右子树的指针以及一个整数值。通过这种结构,我们可以构建一个二叉树,其中每个节点都有一个值,以及可能存在的左子树和右子树。// 首先,定义一个结构体类型别名BinTreeNode,这个结构体用于表示二叉树的节点。// left是一个指向左子树根节点的指针。// 在二叉树中,每个节点最多有两个子节点,这里left表示节点的左子树。// right是一个指向右子树根节点的指针。// 与left相似,right表示节点的右子树。
2024-09-07 14:22:27
3537
1
原创 数据结构--堆排序(超详细!!!)
堆排序的核心思想是将待排序的序列构造成一个大顶堆(或小顶堆),此时整个序列的最大值(或最小值)就是堆顶的根节点。它首先构建一个初始堆,然后不断地将堆顶元素与堆的最后一个元素交换,并重新调整堆的结构,直到整个数组有序。从最后一个非叶子节点开始(即最后一个节点的父节点),向上遍历每个节点,并对每个节点执行“下沉”操作,以确保它们满足堆的性质。由于交换后可能破坏了堆的性质,因此需要对剩下的元素(不包括已经排序好的最后一个元素)重新进行堆的调整。这个阶段的目标是将一个无序数组转换为一个堆(通常是大顶堆)。
2024-09-06 14:05:53
979
原创 数据结构--堆(C语言实现,超详细!!!)
堆(Heap)是一种非常有用的数据结构,特别在需要频繁地进行插入和删除最大或最小元素的操作中表现出色。但请注意,这里的“堆”与编程语言中用于动态内存分配的“堆”是两个完全不同的概念。简单地说,堆是一种特殊的树形数据结构,它满足堆属性:即任意节点都小于或等于(在最大堆中)或大于或等于(在最小堆中)其子节点。最常见的堆是二叉堆,它是一种完全二叉树,这意味着除了最后一层之外,每一层都是完全填满的,而且最后一层的元素都是靠左对齐的,是连续的。
2024-09-05 23:02:17
1674
1
原创 数据结构--经典排序之快速排序(超详细!!)
它的基本思想是,通过一次排序将待排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准后面(相同的数可以到任一边)。比如先对左边的子序列[3, 2, 1, 4, 5]进行快速排序,选择3为基准值,分区后得到[2, 1, 3, 4, 5],然后再对左右两边的子序列进行排序,直到整个序列有序。
2024-09-05 00:24:54
1244
原创 数据结构--经典排序之选择排序(超详细!!)
它的工作原理是,首先在未排序序列中找到最小(或最大)元素,存放到排序序列的起始位置,然后再从剩余未排序元素中继续寻找最小(或最大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。.如果在交换之前,max恰好是begin,那么由于begin位置的值已经被交换出去,我们需要更新max为min的位置。.接着,我们使用Swap函数将begin位置的值与最小值进行交换,这样确保了begin位置始终是已排序的最小值。.Swap 函数是一个简单的值交换函数,它接受两个整数的指针,并交换它们所指向的值。
2024-09-04 08:13:48
1388
原创 数据结构--经典排序之计数排序(超详细!!)
这样,相同的元素会被依次放置在连续的位置上,而较小的元素会先被放置,从而实现排序。这个计数排序算法的时间复杂度为O(n+k),其中n是待排序元素的个数,k是待排序元素的取值范围。:计数排序的时间复杂度为O(n+k),其中n是待排序元素的个数,k是待排序元素的取值范围。:根据找到的最大值和最小值,计算出数组中数值的范围(range),并动态分配一个大小为range的整数数组count用于计数。:计数排序只适用于整数的排序,且当k的值非常大时,算法的空间复杂度会变得很高,这可能使得算法在实际应用中变得不可行。
2024-09-03 15:30:24
1201
原创 数据结构经典排序之归并排序(超详细!!)
(Merge Sort)是一种分治策略的排序算法, 其基本思想是将待排序的序列划分为若干个子序列,每个子序列是一个有序的序列。在合并过程中,通过比较两个子数组的首元素,选择较小的元素放入新的数组中,然后移动下标,直到一个数组为空。递归进行排序并合并:对子序列递归地应用归并排序算法,然后将已排序的子序列合并成一个有序的序列,这是归并排序算法的核心步骤。从最底层的只包含一个元素的子数组开始,逐步向上层合并,每次合并都将两个有序数组合并成一个更大的有序数组。合并 [1] 和 [3],得到 [1, 3]
2024-09-02 15:37:25
880
原创 数据结构-经典排序之插入排序与希尔排序
它的基本思想是:先将整个待排序的记录序列分割成为若干子序列(由相隔某个“增量”的记录组成)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的记录“基本有序”时,再对全体记录进行一次直接插入排序。算法的基本思想是将一个数据元素从其输入数组中取出,然后将其插入到已排序的数组中适当的位置,以达到排序的目的。选择下一个元素 2,与已排序部分的元素 [3, 4] 进行比较。:希尔排序是一种不稳定的排序算法,因为在分割成子序列进行插入排序的过程中,相同值的元素可能会因为增量的改变而改变其相对顺序。
2024-08-29 22:22:39
745
原创 力扣刷题---链表专题(超详细解析!!!)
然后,它遍历原始链表,并根据节点的值将其添加到适当的新链表中。:这个题目的解法是快慢指针法,即创建两个指针,快指针fast每次移动两个节点,慢指针slow每次移动一个节点,因此当fast遍历完整个链表时,slow刚好遍历到链表的一半,( 当该链表的结点为偶数个时fast为空,当该链表的结点为奇数个时fast->next为空,)从而实现了找到链表中间节点的目的。在每次迭代中,它将当前节点的 next 指针指向前一个节点,然后更新头节点为当前节点,并移动到下一个节点继续处理,直到所有节点都处理完毕。
2024-08-26 16:34:29
1157
原创 数据结构-链表(C语言实现,超详细!!小白必看!!)
你可以把单链表想象成一串珍珠项链,每一颗珍珠都代表一个数据元素,而连接这些珍珠的线就相当于指针,指向下一个珍珠(元素)。在单链表中,每个元素都保存着下一个元素的地址,这样就能够按顺序访问链表中的每一个元素。//这里把int类型重命名为SLTDataType,是为了方便以后单链表储存别的类型数据,因为数据域指的可能是整型也可能是字符串等等,如果以后想要储存别的类型的数据只需要在这里把int改为别的类型即可,不需要在后面的代码去逐个改变//数据域//指针域}SLTNode;
2024-08-24 16:08:07
1268
3
原创 数据结构-顺序表(C语言实现,超详细!!)
顺序表,顾名思义,就是一种按照顺序排列的线性表。线性表是一种非常基础且重要的数据结构,在计算机科学中有着广泛的应用。常见的线性表:顺序表、链表、栈、队列、字符串等等顺序表通常是用一段连续的存储单元来依次存储线性表中的数据元素,这使得顺序表在物理位置上也是相邻的。由于这个特性,顺序表允许我们通过计算元素的位置来直接访问它,这种访问方式被称为“随机访问”或“直接访问”。例如,如果我们知道顺序表的起始地址和每个元素所占的存储空间大小,那么我们就可以通过简单的计算找到任何一个元素的位置。
2024-08-23 20:47:51
568
1
原创 数据结构-队列(C语言实现,超详细版!!)
队列(Queue)是一种特殊类型的线性数据结构,它遵循特定的操作顺序。在计算机科学中,队列被广泛应用于各种场景,比如任务调度、缓冲处理等。//队列的定义}QNode;int size;}Queue;
2024-08-23 13:17:38
3325
2
原创 数据结构-栈(C语言实现,超详细版!!!)
栈(Stack)是一种特殊的数据结构,它遵循后进先出(LIFO,Last In First Out)的原则。想象一下一摞盘子,我们只能从顶部添加或移除盘子,而不能从中间或底部操作。这就是栈的基本思想。栈的基本操作入栈(Push):向栈中添加一个元素的操作叫做入栈。就像我们往一摞盘子上再放一个盘子,新加的盘子会被放在最上面。出栈(Pop):从栈中移除一个元素的操作叫做出栈。就像我们从一摞盘子上拿走最上面的盘子,只有最上面的盘子才能被拿走。查看栈顶元素(Peek):查看栈顶元素但不移除它的操作。
2024-08-23 00:29:17
576
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人