自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 c++基础知识入门

本文介绍了C++编程中的核心概念:命名空间(namespace)、输入输出、缺省参数、函数重载、引用和inline函数。命名空间用于解决标识符冲突,通过域隔离避免污染全局作用域。C++的IO流(cin/cout)相比C更智能,可自动识别类型。缺省参数提高了函数调用的灵活性,函数重载则允许同名函数根据参数不同实现多态。引用作为变量的别名,简化了指针操作并提高了效率。inline函数通过消除调用开销优化性能,但需注意代码膨胀问题。文中还对比了宏与inline函数的区别,强调了inline在类型安全和参数求值方面

2025-08-24 19:37:41 778 3

原创 数据结构----八大排序算法

本文系统介绍了多种经典排序算法及其实现,包括插入排序(直接插入、希尔排序)、选择排序(直接选择、堆排序)、交换排序(冒泡、快速排序)以及归并排序和计数排序。每种算法从原理、代码实现、时间复杂度/空间复杂度三个维度进行详细解析,并附有优化思路和测试代码。特别对快速排序的三种实现方式(hoare法、挖坑法、前后指针法)和递归/非递归版本进行了对比分析。文章最后通过性能测试对比了各算法效率,帮助读者理解不同场景下的适用选择。整体内容全面深入,代码示例清晰,兼具理论性和实践指导价值。

2025-08-19 11:54:39 639 8

原创 二叉树应用实践

本文总结了二叉树相关算法题解,包括单值二叉树、相同树、对称树、子树判断及前中后序遍历的实现。核心要点:1. 单值二叉树通过递归检查节点值与子节点是否一致;2. 相同树和对称树通过结构比较和递归验证;3. 子树判断基于相同树逻辑;4. 前中后序遍历分别采用根-左-右、左-根-右、左-右-根的顺序递归实现。所有解法均包含空节点处理,并注意内存管理(如malloc/free)。代码示例展示了如何通过递归处理二叉树问题,同时提示了递归深度限制的潜在风险。

2025-08-16 12:21:19 818 2

原创 数据结构---链式结构二叉树

本文系统介绍了链式结构二叉树的实现与操作。主要内容包括:1)二叉树的创建与结构定义;2)三种基本遍历方式(前序、中序、后序)的递归实现及应用场景;3)常见二叉树操作算法:求节点数、叶子节点数、第k层节点数、树深度、查找节点等;4)二叉树的销毁方法;5)层序遍历的队列实现。各算法均采用递归思想,给出了代码实现、核心逻辑及优缺点分析,特别强调了避免全局变量的重要性。文章为理解和实现链式二叉树提供了完整的技术参考,涵盖了从基础创建到复杂操作的全过程。

2025-08-14 19:09:06 953 1

原创 堆----TOP-K问题

本文介绍了TOP-K问题的解决方案,即通过堆结构高效查找数据集中前K个最大或最小元素。核心思路是:先建立K元素堆(最大/最小堆取决于问题类型),然后将剩余元素与堆顶比较,不满足条件则替换并调整堆结构。文章提供了C语言实现代码,包括堆的构建、调整和TOP-K查找过程,并分析了时间复杂度为O(nlogk),说明该方法在K远小于数据总量n时具有显著效率优势。

2025-08-14 12:42:21 144

原创 数据结构--------堆

摘要:二叉树是一种非线性数据结构,由有限节点组成,具有层次关系。文章详细介绍了二叉树的基本概念、术语(如根节点、子节点、度等)和存储结构(顺序存储和链式存储)。重点讲解了堆的实现,包括大根堆/小根堆的特性、核心操作(插入、删除、调整)及其时间复杂度分析。还比较了向上调整和向下调整两种建堆方法的时间复杂度差异(O(nlogn) vs O(n)),并提供了堆排序的实现代码。文章最后展示了二叉树在文件系统、数据库索引等领域的实际应用场景。

2025-08-14 11:05:37 1344 5

原创 栈和队列应用实操

本文总结了四种经典数据结构实现方法:1. 有效的括号验证:使用栈结构匹配括号对,时间复杂度O(n),空间复杂度O(n)。2. 队列实现栈:通过两个队列互相导数据实现LIFO特性,每个元素最多入队两次。3. 栈实现队列:采用分工明确的push/pop双栈结构,通过数据迁移实现FIFO特性。4. 循环队列设计:利用k+1空间和模运算实现循环特性,所有操作时间复杂度O(1)。所有实现均包含完整的内存管理、边界条件处理和空容器安全销毁机制,展现了数据结构转换的核心思想与工程实践要点。

2025-08-09 18:11:38 712 2

原创 数据结构----栈和队列认识

本文介绍了栈(后进先出)和队列(先进先出)两种基本数据结构的实现方法。栈的实现部分详细说明了初始化、入栈、出栈、判空、获取栈顶元素、元素个数统计和销毁等操作的代码实现,重点分析了数组动态扩容机制。队列的实现部分则展示了链表形式的队列结构,包括初始化、入队、出队、判空、获取队头/队尾元素、销毁等操作,并强调了边界条件的处理。两种数据结构都通过头文件定义接口,源文件实现具体功能,体现了模块化编程思想,同时提供了测试用例和递归模拟示例。

2025-08-07 17:13:00 981

原创 双向链表认识

摘要:双向链表是一种线性数据结构,每个节点包含指向前驱和后继的指针,相比单链表具有更高的操作灵活性。其核心结构包括数据域、前驱指针和后驱指针。基本操作包括初始化、插入(头插/尾插)、删除(头删/尾删)、查找、销毁等。双向链表支持O(1)时间复杂度的头尾插入删除操作,但随机访问效率较低。实现时需特别注意指针修改顺序以避免链表断裂。与顺序表相比,链表在插入删除时无需数据搬移,但随机访问效率较低。销毁操作需遍历释放所有节点,二级指针版本可自动置空头指针。双向链表适合频繁插入删除的场景,而顺序表更适合随机访问。

2025-08-06 11:07:22 1014 2

原创 单链表应用实践

本文总结了链表常见问题的解决思路和代码实现:1. 移除元素:通过创建新链表并尾插非目标值节点,注意断开原链表连接;2. 反转链表:使用三指针法(n1,n2,n3)或递归实现;3. 中间节点:快慢指针法,快指针两倍速移动;4. 合并有序链表:使用哨兵节点简化操作,按序连接节点;5. 回文判断:数组法或优化空间法(反转后半部分);6. 相交链表:计算长度差后同步遍历;7. 环形链表:快慢指针判断,相遇后找入口点。关键点包括指针操作、边界条件处理和空间优化。

2025-08-05 14:16:05 1041 2

原创 数据结构之链表

单链表是一种非连续存储结构,通过指针链接实现数据元素的逻辑顺序。每个节点包含数据和指向下一节点的指针。摘要介绍了单链表的基本操作实现:1)创建节点并初始化;2)头插/尾插操作;3)头删/尾删处理;4)查找指定元素;5)在指定位置前/后插入节点;6)删除指定节点及其后继节点;7)销毁链表释放内存。关键点包括指针操作、边界条件处理(如空链表、首尾节点)以及内存管理。所有操作均通过修改节点间的指针链接来维护链表结构,体现了链表的动态内存分配特性。

2025-08-03 21:15:06 411 2

原创 数据结构之顺序表应用与双指针法

摘要:本文介绍了数组元素删除的实现方法,重点分析了双指针算法在移除元素和去重问题中的应用。文章首先展示了通过元素移动实现删除的基本方法,然后详细讲解了力扣算法题"移除元素"和"删除有序数组重复项"的双指针解法,特别解释了++dst!=src条件避免无效赋值的原理。最后提出了6种优化代码性能的实用技巧,包括避免重复计算、条件判断优化、指针判空等,并以合并有序数组为例比较了不同解法的时间复杂度。

2025-08-01 10:12:41 516 1

原创 数据结构之顺序表

线性表(linear list)是n个具有相同特性的数据元素的有限序列。线性表是⼀种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串...线性表在,也就说是连续的⼀条直线。但是在, 线性表在物理上存储时,通常以数组和链式结构的形式存储。

2025-07-31 12:09:04 280

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

是计算机存储,组织数据的方式,指相互之间存在⼀种或多种特定关系的数据元素的集合。有线性表,树 ,图,哈希等: 就是定义良好的计算过程,他取⼀个或⼀组的值为输⼊,并产⽣出⼀个或⼀组值作为输出。简单来说算法就是⼀系列的计算步骤,用来将输⼊数据转化成输出结果。

2025-07-29 18:21:31 1042 2

原创 预处理详解

define #include是预处理指令int main()int m=max;return 0;__DATE__,__TIME__ )// \是续行符int main()return 0;#define后面最好不要加上;#define机制允许参数替换到文本中,这种实现称为宏parament-list 是⼀个由逗号隔开的符号表,它们可能出现在stuff中注意: 参数列表的左括号必须与name紧邻,如果两者之间有任何空白存在,参数列表就会被解释为stuff的一部分。

2025-07-27 23:13:29 737 1

原创 文件操作认识

函数名功能适用于fgetc字符输入函数(字符)所有输入流fputc字符输出函数所有输出流fgets文本行输入函数(字符串)所有输入流fputs文本行输出函数所有输出流fscanf格式化输入函数所有输入流fprintf格式化输出函数所有输出流fread二进制输入文件输入流fwrite二进制输出文件输出流上⾯说的适用于所有输入流⼀般指适用于标准输输入流和其他输入流(如文件输入流);所有输出流⼀ 般指适用于标准输出流和其他输出流(如文件输出流)。

2025-07-26 17:21:07 802 2

原创 动态内存管理

但上述:1.开辟空间大小固定2.数组申明时必须指定数组长度,一旦确定不能调整,因此引入动态内存开辟,可以申请和释放空间。

2025-07-24 18:08:25 607 2

原创 联合和枚举

像结构体一样,联合体是由一个或者多个成员构成,可以是不同的类型,但是编译器只为最大成员分配足够内存空间。联合体特点是公用一块内存空间,也叫共同体。

2025-07-23 18:16:10 269 2

原创 结构体深入理解

位段的⼏个成员共有同⼀个字节,这样有些成员的起始位置并不是某个字节的起始位置,那么这些位 置处是没有地址的。所以不能对位段的成员使⽤&操作符,这样就不能使⽤scanf直接给位段的成员输⼊值,只能是先输⼊ 放在⼀个变量中,然后赋值给位段的成员。- c 需从 2 的倍数地址开始, b 结束于地址 7, c 从地址 8 开始(满足 2 的倍数)。- 结构体总大小需是最大对齐值(4)的倍数,当前成员总占用 10 字节,因此填充 2 字节,最终大。2.其他成员变量要对⻬到某个数字(对⻬数)的整数倍的地址处。

2025-07-22 21:39:28 329 1

原创 C语言内存函数与数据存储

是C语言标准库中的一个函数,<string.h>,用于内存块之间的复制注意:函数memcpy从src的位置开始向后复制n个字节的数据到dest指向的内存位置。这个函数在遇到'\0'的时候并不会停下来。如果src和dest有任何的重叠,复制的结果都是未定义的。模拟实现(字节)

2025-07-19 22:54:36 847 1

原创 字符函数和字符串函数

本文介绍了C语言字符处理相关函数,包括字符分类函数(如islower、isdigit等)、字符转换函数(tolower、toupper)以及字符串操作函数(strcpy、strcat、strcmp等)。详细说明了各函数的用法、注意事项和模拟实现方法,并提供了具体应用示例。同时介绍了strerror错误处理函数和perror的使用,帮助开发者更好地处理程序错误。这些函数都定义在ctype.h和string.h头文件中,是C语言字符串处理的基础工具。

2025-07-19 12:52:52 731 1

原创 深入理解指针5

概念:将函数的地址作为参数传给另一个函数,当使用这个指针调用其指向的函数时,被调用的函数就是回调函数。

2025-07-18 13:44:04 198

原创 深入理解指针(4)

c/c++会把常量字符串存储到单独的一个内存区域,当几个指针指向同一个字符串时,他们实际会指向同一块内存。但是用相同常量字符串去初始化不同数组时就会开辟出不同内存块。2.浮点型指针变量:float* pf;存放浮点型变量地址,能够指向浮点型数据指针。1.整型指针变量:int*pint;存放整型变量的地址,能够指向整型数据的指针。由此看出数组指针存放的应该是数组的地址,能够指向数组的指针变量。[] 的优先级高于*,所以必须加上()保证p先和*结合。故str1和str2不同,而3和4相同。

2025-07-17 22:49:39 285

原创 深入理解指针(3)

(p+i)同p[i]等价 arr[i]等价于*(arr+i) 数组元素的访问在编译器处理时,也是转换成首元素的地址+偏移量求出元素地址,然后解引用来访问的。输出后发现:&arr[0]和&arr[0]+1 相差4个字节,arr和arr+1相差4个字节,是因为arr &arr[]都是首元素地址,加一就是跳过一个元素。可以看出数组内部没有获得正确个数,所以在数组传参的时候,传递的是数组名,本质上数组传参传的是数组首元素地址。指针变量也是变量,有变量就有地址,指针变量的地址就是二级指针。

2025-07-17 11:42:58 394

原创 深入理解指针(2)

变量是可以修改的,如果把变量的地址交给一个指针变量,通过这种变量也可以修改。但如果加上一些限制,比如const,则修改不了了。

2025-07-16 22:10:36 748

原创 深入理解指针(1)

生活中,有了房间号,找房间就方便了很多。而CPU(中央处理器)在处理数据时,数据需要在内存中读取,处理后的数据也会放回内存。内存又被划分为一个个内存单元,每个内存单元大小取一个字节内存单元的编号==地址==指针。

2025-07-16 18:32:44 544

原创 操作符详解

int x;int y;}p={1,2};使用方式:结构体变量.成员名。

2025-07-16 12:40:45 901

原创 VS实用技巧

断点的作用是可以在程序任意位置设置断点,打上断点就可以使程序执行到想要的位置暂停,接下来使用F10 ,F11,观察代码细节。F11 :逐语句,每次都执行一条语句,但可以我们执行逻辑进入函数内部,在函数调用地方进入函数观察细节,如果使用F10将直接完成函数调用。debug称为调试,承认问题,通过手段定位问题位置,可以是逐过程调试,也可以是隔离,屏蔽代码,找到问题所在,在修复代码,重新测试。开始调试后,在菜单栏中【调试】->【窗口】->【监视】,打开任意一个监视窗口,输入想要观察的对象就行。

2025-07-15 21:55:43 267

原创 函数的认识(C语言)

ret_type fun_name(形式参数)//ret_type是函数返回类型,//fun_name是函数名//函数的参数是void明确表示函数没有参数函数举例//写一个加法函数int n=0;n=x+y;return n;//简化return x+y;int b=0;return 0;函数定义要放在前面,否则会报错。//函数定义return 1;//函数调用int main()int y=0;

2025-07-15 15:57:06 945

原创 数组的认识

sizeof是C语言一个可以计算类型或变量大小,也可以计算数组大小(单位字节)1.数组中存放的是一个或多个数据,但数组元素个数不能为零。从输出结果来看,每一行内部元素都是相邻的,差4个字节。数组又分为一维和多维数组。有行有列,均从0开始,行列即可定位准确值。因此需要数组元素个数地方不用固定写死。可获得数组元素在内存中的存储地址。初始化可以省略行,但是不能省略列。数组是一组相同类型元素的集合。计算一个元素所占字节个数。则可以计算数组的元素个数。[]是下标引用操作符。

2025-07-14 22:14:54 346

原创 分支与循环

c语言中,0为假,非零表示真。

2025-07-14 17:43:15 1171

原创 c语言数据类型和变量

printf()参数与占位符是一一对应关系,如果有n个占位符,printf()的参数就应该有n+1个,如果参数少于占位符,printf()可能输出内存中任意值。%s占位符用来输出字符串,默认是全部输出。%s:字符串(无法读取多个单词,scanf()遇见%s会在字符串变量末尾存储一个空字符,使用其时,要指定字符串最长长度,%[m]s,m是字符串最大长度)float----单精度浮点型 double-----双精度浮点型 long double -----精度更高。

2025-07-13 22:38:38 968

原创 c语言常见概念

c语言是一种编译性计算机语言,源代码都是文本文件,本身无法执行,必须通过编译器翻译和链接器的链接,生成二进制的可执行文件,可执行文件才可以执行。使用双括号括起来的一串字符称为字符串:"abcdef" 其打印格式%s,有一个特殊点是字符串末尾隐藏着一个\0字符,是其结束标志。1./**/ 可插在行内,不支持嵌套注释,/*开始后,遇见第一个*/就结束了。c语言程序不论有多少行代码,都从main函数开始执行,它也被称为:主函数。\t:制表符,光标移到下一个水平制表位,通常是下一个4/8的倍。

2025-07-13 13:32:10 981

原创 新起点 新目标

编程小白

2025-01-12 22:31:47 245

空空如也

空空如也

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

TA关注的人

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