- 博客(48)
- 收藏
- 关注
原创 C++从入门到实战----类和对象(中)
本文系统介绍了C++类和对象的核心概念,重点分析了6个默认成员函数。主要内容包括:构造函数(初始化对象)、析构函数(资源清理)、拷贝构造函数(对象拷贝初始化)、赋值运算符重载(对象间赋值)、取地址运算符重载。详细阐述了这些函数的特性:编译器自动生成规则、何时需要自定义实现、参数传递方式等。特别强调了拷贝构造与赋值重载的区别,以及深拷贝与浅拷贝的实现要点。通过Date类和Stack类的对比示例,展示了不同场景下的实现差异。文章还介绍了const成员函数和运算符重载的应用技巧,为C++面向对象编程提供了全面指导
2025-12-26 21:01:57
457
1
原创 C++从入门到实战----类和对象(上)
本文介绍了C++面向对象编程中的类与对象概念,详细讲解了类的定义、访问限定符、类域以及实例化过程。重点阐述了类成员的封装特性,成员变量与成员函数的区别,以及对象内存分配规则。通过栈类的C与C++实现对比,展示了面向对象编程的优势。文章还深入解析了this指针的工作原理及其在成员函数中的隐式传递机制,并通过实例说明了空指针调用成员函数时的行为差异。最后通过内存对齐规则和对象大小计算,帮助读者理解类实例化的底层实现原理。
2025-11-14 20:30:53
1193
原创 C++从入门到实战----入门基础
C++作为C语言的扩展,自1985年问世以来已成为系统编程、游戏开发等领域的核心语言。本文介绍了C++的基础知识:1) 命名空间解决命名冲突;2) 输入输出流简化I/O操作;3) 缺省参数和函数重载增强灵活性;4) 引用作为安全别名替代指针;5) const确保数据安全;6) inline优化短函数性能。文章还对比了指针与引用的区别,展示了C++相较于C语言的改进之处,为初学者提供了全面的入门指导。
2025-11-14 18:32:03
1359
原创 数据结构从基础到实战——排序
本文系统介绍了12种经典排序算法,包括冒泡排序(O(N^2))、堆排序(O(NlogN))、插入排序(O(N^2))、希尔排序(O(N^1.3))、选择排序(O(N^2))、快速排序的四种实现方式(O(NlogN))、归并排序的递归与非递归版本(O(NlogN))以及非比较的计数排序。每种算法都提供了C语言实现代码、时间复杂度分析(O(1)-O(N^2))和测试结果,涵盖交换、分治、递归等核心思想,为算法学习和工程应用提供了完整参考。
2025-11-02 20:32:04
424
原创 数据结构从入门到实战——二叉树
在计算机科学的演进历程中,数据结构作为组织与管理信息的核心工具,始终扮演着至关重要的角色。面对日益复杂的数据处理需求,线性结构在表达层级关系与实现高效操作方面逐渐显现出局限性。为此,树形结构应运而生,以其天然的层次化特性,为解决分治、搜索、排序与表达式处理等复杂计算问题提供了强有力的模型支撑。二叉树的基本功能:层次化组织结构:二叉树以唯一的根节点(Root)为逻辑起点,通过指针或引用建立明确的父子层级关系,自顶向下逐层扩展。每个节点最多拥有两个子节点——左子节点与右子节点,形成严格的二分分支结构。
2025-10-20 18:21:34
936
原创 数据结构从入门到实战——堆
本文系统介绍了树与二叉树的数据结构及其应用。主要内容包括:1.树的基本概念(结点度、叶子结点、层次等)和表示方法;2.二叉树的定义、特性(度≤2、有序性)及特殊类型(满二叉树、完全二叉树);3.二叉树的存储结构(顺序/链式)和实现方式,重点讲解了堆(大/小堆)的顺序存储实现;4.堆的核心操作(插入、删除、排序)及TOP-K问题解决方案,通过代码示例演示了堆排序和查找前K大数的实际应用。全文由浅入深地阐述了树形结构在计算机科学中的重要性及其高效处理层次化数据的优势。
2025-10-18 21:37:58
905
原创 数据结构从入门到实战————队列
本文介绍了队列数据结构的基本概念和C语言实现。队列作为遵循先进先出(FIFO)原则的线性表,在队尾插入数据(Enqueue),在队头删除数据(Dequeue)。文章详细展示了使用链表实现队列的完整代码,包括初始化、销毁、插入、删除等核心操作函数,以及获取队头/队尾数据、判断队列状态等辅助方法。测试代码演示了队列的基本使用流程,验证了实现的正确性。该实现通过维护头尾指针和size变量,确保各操作的时间复杂度为O(1),适用于任务调度、BFS等需要顺序处理的场景。代码已开源至指定码云仓库。
2025-10-02 13:49:45
473
原创 数据结构从入门到实战————栈
摘要: 本文系统介绍了栈数据结构的基本概念与实现方法。栈是一种遵循"后进先出"(LIFO)原则的线性数据结构,仅允许在栈顶进行插入(push)和删除(pop)操作。文章详细阐述了栈的C语言实现方案,包括数组存储结构定义、初始化、销毁、入栈出栈等核心操作,并提供了时间复杂度分析。栈具有高效的O(1)操作特性,适用于函数调用、递归等需要回溯的场景。文中包含完整的代码实现和测试结果,为理解栈的工作原理和实际应用提供了技术参考。
2025-09-28 20:43:08
980
原创 数据结构从入门到实战——算法的时间复杂度
是用来衡量一个算法运行时间随输入数据规模增长而变化的趋势。它不是指算法实际运行了多少秒,而是描述当问题规模变大时,算法执行时间“增长得多快”。我们通常用大写字母来表示。正文开始。
2025-09-22 17:55:37
320
原创 数据结构从入门到实战————双向链表
本文详细介绍了双向链表的实现原理与操作方法。双向链表通过在每个节点中添加前驱指针,实现了双向遍历和更高效的插入删除操作。文章具体讲解了带头双向循环链表的结构定义,并逐步实现了节点创建、初始化、打印、头尾插入删除、查找定位、指定位置插入以及销毁等核心功能。每个操作都配有完整的代码实现和测试用例,通过指针操作演示了如何高效维护节点的前后连接关系。这种数据结构在需要频繁双向遍历和动态调整的场景中具有显著优势,为理解更复杂的数据结构打下了重要基础。
2025-09-21 11:19:45
863
原创 数据结构从入门到实战————链表
摘要:本文系统介绍了链表这一基础数据结构。链表通过节点指针实现动态存储,具有插入删除高效(O(1))、空间灵活等优点,但存在随机访问效率低、内存开销较高等缺点。文章详细阐述了链表的概念结构(类似火车车厢的节点连接方式),并给出C语言实现代码,包括节点定义、打印、尾插/头插、尾删等核心操作。重点解析了二级指针传参的必要性及边界条件处理,通过测试案例验证了各功能的正确性,为理解链表原理与实现提供了完整参考。 (字数:150)
2025-09-17 22:44:01
1398
原创 数据结构从入门到实战——顺序表
顺序表通常以数组作为其底层数据结构,但它提供了更丰富和高级的操作接口,使得顺序表在实际应用中比原始数组更加方便、高效。
2024-04-15 17:12:45
2335
26
原创 C语言从入门到实战——预处理详解
预处理是C语言编译过程中的一个阶段,它在整个编译过程的最开始进行,主要目的是对源代码进行一系列的处理,以生成更适合编译器处理的代码。
2024-04-13 19:44:28
1672
17
原创 C语言从入门到实战————文件操作
在C语言中,文件操作是指对文件进行读写和管理的一系列活动。这些操作是通过C标准库中的文件处理函数来实现的,使得程序员能够创建、打开、关闭、读取和写入文件。
2024-04-08 20:45:44
1454
3
原创 C语言中入门到实战————动态内存管理
动态内存管理是C语言中用于在程序运行时分配和释放内存的一种机制它允许程序根据需要动态地请求和释放内存空间,而不是在编译时就固定下来。这种灵活性使得程序能够更好地适应不同的运行条件和需求。内存分配:C语言提供了几种动态内存分配函数,如malloc()calloc()realloc()等。这些函数可以在堆区为程序分配所需的内存空间。例如,malloc()函数接受一个参数,即需要分配的内存大小(以字节为单位),并返回一个指向分配内存的指针。内存释放:当不再需要已分配的内存时,应使用free()
2024-04-01 19:46:02
1634
14
原创 C语言从入门到实战——自定义类型:结构体,联合体和枚举
结构体(struct):结构体是一种自定义的数据类型,它可以将不同类型的数据组合在一起。结构体的作用是提高代码的可读性和模块化,使得代码更加清晰和易于维护。使用场景包括:存储多个相关联的数据,如学生信息、员工信息等。联合体(union):联合体与结构体类似,但它的所有成员共享同一块内存空间。联合体的作用是在相同的内存空间中存储不同类型的数据,节省内存空间。使用场景包括:需要在不同类型之间进行切换的场景,如操作系统中的进程控制块(PCB)。枚举(enum)
2024-03-30 14:47:16
1561
15
原创 C语言从入门到实战----数据在内存中的存储
其实超过⼀个字节的数据在内存中存储的时候,就有存储顺序的问题,按照不同的存储顺序,我们分 为⼤端字节序存储和⼩端字节序存储,下⾯是具体的概念:⼤端(存储)模式:是指数据的低位字节内容保存在内存的⾼地址处,⽽数据的⾼位字节内容,保存在内存的低地址处。⼩端(存储)模式:是指数据的低位字节内容保存在内存的低地址处,⽽数据的⾼位字节内容,保存在内存的⾼地址处。
2024-03-27 16:44:05
2618
6
原创 C语言从入门到实战----C语言中内存函数的使用和模拟实现
在编程领域,内存管理是至关重要的一环,它确保了程序能够高效、稳定地运行。C语言作为一门底层的编程语言,提供了一系列的内存管理函数供开发者使用,以实现动态内存的分配、释放和访问。包括了一系列用于操作内存内容的函数:1.内存复制函数:memcpy(): 将源内存区域的内容复制到目标内存区域,不保证源和目标区域有重叠;memmove(): 类似于memcpy(),但在源和目标区域有重叠时也能正确工作。memset(): 将指定的内存区域设置为某个特定的值,常用于初始化内存memcmp()
2024-03-24 10:12:51
649
6
原创 C语言从入门到实践——常用字符函数和字符串函数的使用和模拟实现
字符函数主要用于对单个字符进行分类、转换和比较等操作。而字符串函数则用于处理由多个字符组成的字符串,如复制、拼接、比较和查找等。常用的字符函数如下:isalpha:检查字符是否为字母(a~z, A~Z);iscntrl:检查字符是否为控制字符(八进制000~037以及177的字符);isdigit:检查字符是否为十进制数字(0~9);isgraph:检查字符是否为图形表示,依赖于使用语言的环境;tolower:将大写字母转换为小写字母;toupper:将小写字母转换为大写字母。strlen。
2024-03-23 11:10:13
1107
7
原创 C语言从入门到实战————数组和指针的深入理解
统计的是从 strlen 函数的参数 str 中这个地址开始向后, \0 之前字符串中字符的个数。strlen 函数会⼀直向后找 \0 字符,直到找到为⽌,所以可能存在越界查找。sizeof是C语言中的单目操作符,用于返回对象或类型所占的内存字节数。如果操作数是类型的化,则计算该变量类型的内存大小。
2024-03-14 13:59:06
748
2
原创 使用冒泡排序的思想来模拟实现qsort的功能
/1.交换函数i < width;*p2 = tmp;p1++;p2++;//2.模拟实现排序的冒泡排序框架i++)j++)if ( ((char*)base+j*width - (char*)base + (j+1) * width) > 0)//如果二者相减大于0,则二者进行交换//进行交换//3.打印函数i < len;i++)//4.两个数的比较函数//5,主函数int main()return 0;
2024-03-11 14:06:23
653
2
原创 指针数组的理解
指针数组的概念:即用于存放指针变量的数组代码如下:使用指针数组来模拟二维数组int main(){ //创建三个整型数组 int arr1[] = { 1,2,3,4,5 }; int arr2[] = { 2,3,4,5,6 }; int arr3[] = { 3,4,5,6,7 }; int* p_arr[3] = { arr1,arr2,arr3 }; for (int i = 0; i < 3; i++) { for (int j = 0; j < 5
2024-03-05 16:07:45
443
原创 野指针的成因及如何避免野指针
1.野指针1.1 野指针的概念:指针指向的位置是不可知的(随机的,不正确,没有明确限制的)1.2野指针的成因:(1)指针未初始化int main(){ int* p;//局部指针没有初始化,指向的位置为随机值 *p = 20; return 0;}如何避免:初始化指针,如果不知道指针的地址,就给它一个空指针(NULL)(2)指针越界访问int main(){ int arr[10] = { 0 }; int* p = arr; for (int i =
2024-03-03 09:47:21
628
原创 不能创建临时变量(第三个变量),实现两个整数的交换。
1.首先(a = a ^ b)(1),然后(b = a ^ b)(2)此时我们可以将上面的 (1)式代入到(2)式中,得到(a^b^b),根据异或计算的特殊性(上面有总结),可以得到结果a。2.(a = a ^ b),b的值此时为a,而a的值此时为(a ^ b),所以将二者带入可以得到(a = a ^ b ^ a),而异或是支持交换律的,所以可以得出结果(a = b)
2024-02-28 11:19:28
408
原创 递归和非递归分别实现求第n个斐波那契数
2.进入循环,每次c都等于a和b的和,然后把b的值赋给a,c的值赋给b,目的是为下一次循环做准备,而循环的条件必须是要查找的数大于等于3。1.如果不使用递归,那么就会想到去使用迭代,通常思路就是一个一个往后加(而递归是一个一个往前找),所以我设置三个参数a,b,c。
2024-02-27 11:07:53
392
1
原创 求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字
int Calculate(int x, int y){ int sum = 0; int num = 0; for (int i = 0; i < y; i++) { num = num * 10 + x; sum = sum + num; } return sum;}int main(){ int n = 0; int m = 0; scanf("%d %d", &n, &m); int j = Calculate(n, m); printf
2024-02-26 16:05:32
413
1
原创 求出0~100000之间的所有“水仙花数”并输出。
概念: “水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身,如:153=1 ^ 3+5 ^ 3+3 ^ 3,则153是一个“水仙花数”。
2024-02-26 15:53:36
392
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅