自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【C++】stack、queue、容器适配器

本文介绍了三种常用的STL容器适配器:stack、queue和priority_queue。stack遵循LIFO原则,提供push/pop等操作;queue遵循FIFO原则,支持front/back访问;priority_queue基于堆结构,默认大堆,可通过greater创建小堆。文中包含两个栈相关OJ题解:最小栈使用辅助栈跟踪最小值,栈序列验证通过模拟入栈出栈过程。priority_queue自定义类型需重载比较运算符。这些容器适配器为特定场景下的数据操作提供了高效实现。

2026-02-02 00:00:00 629

原创 【C++】list类常用接口及模拟实现

本文介绍了C++标准库中的list容器及其常用接口。list底层实现为双向带头循环链表,支持高效的头尾插入删除操作。文章详细讲解了list的构造函数、迭代器使用、容量查询、元素访问和修改操作,并通过代码示例展示了push_front/pop_front、push_back/pop_back、insert/erase等常用方法的使用方式。特别指出list迭代器不支持随机访问(+/-运算),且仅在元素删除时可能出现迭代器失效问题。list适用于需要频繁插入删除但较少随机访问的场景。

2026-01-30 08:00:00 557

原创 【C++】vector类常用接口及模拟实现

本文介绍了C++ STL中vector容器的基本使用。主要内容包括:vector的定义和构造方法、三种遍历方式(下标、迭代器、范围for)、容量操作(resize/reserve等)、增删查改接口(push_back/insert/erase等)。特别展示了vector存储vector实现二维数组的功能,并演示了使用[][]访问元素的方法。通过代码示例详细说明了各接口的使用场景和注意事项,如resize改变size但不缩容的特性等。

2026-01-28 08:00:00 949

原创 【C++】string类常用接口及模拟实现

C++中的string类提供了比C语言更安全、更方便的字符串操作方式。文章介绍了string的基本构造方法、常用容量操作(size/length/capacity/empty/clear/reserve/resize)以及访问遍历方式([]操作符/迭代器/范围for)。重点对比了C++ string与C字符串的区别,展示了string类的自动内存管理特性,如reserve预分配空间避免频繁扩容,resize调整字符串长度等。通过示例代码演示了string类的各种用法,体现了其面向对象的特性,比C字符串更安全

2026-01-26 08:00:00 1352

原创 【C++】auto和范围for、iterator迭代器

本文介绍了C++11中的auto关键字和范围for循环的使用方法。auto关键字可以自动推导变量类型,简化代码,但需要注意auto不能作为函数参数、不能声明数组等限制。范围for循环提供了一种简洁的遍历容器和数组的方式,底层实现基于迭代器。文章还详细讲解了迭代器的概念和使用方法,包括正向迭代器(begin/end)和反向迭代器(rbegin/rend),展示了如何通过迭代器访问和修改容器元素。这些特性使C++代码更加简洁高效,同时保持了良好的可读性。

2026-01-21 08:00:00 912

原创 【C++】C/C++内存管理、C++模板初阶

摘要:本文介绍了C/C++中的内存管理和模板编程基础。内存管理部分详细讲解了C/C++内存分布(栈区、堆区、数据段、代码段),比较了C语言的malloc/free和C++的new/delete在操作内置类型和自定义类型时的区别。模板编程部分阐述了泛型编程概念,重点讲解了函数模板的定义格式、实例化方式和匹配原则,以及类模板的定义和实例化方法。文章通过代码示例展示了如何使用模板实现通用交换函数和栈数据结构,帮助读者理解模板编程的核心概念和应用场景。

2026-01-20 08:00:00 1249

原创 【C++】类和对象(三)

本文总结了C++中几个重要的面向对象特性: 构造函数初始化列表:介绍了初始化列表的语法规则,强调引用、const成员等必须通过初始化列表初始化,并说明了成员变量的初始化顺序。 类型转换:讲解了内置类型到类类型的隐式转换机制,以及explicit关键字的作用。 static成员:说明了静态成员的特点、初始化方式以及访问规则,指出静态成员函数没有this指针。 友元机制:介绍了友元函数和友元类的用法,分析了友元关系的特性及其对封装性的影响。 内部类:解释了内部类的概念、特点及其作为外部类友元的特性,说明了内部类

2026-01-19 08:00:00 2007

原创 【C++】类和对象(二)

本文介绍了C++类中的默认成员函数,重点讲解了构造函数、析构函数和拷贝构造函数。主要内容包括:1) 构造函数的特性(自动调用、重载、默认生成规则);2) 析构函数的作用(资源释放)及调用时机;3) 拷贝构造的特殊性(引用参数、深浅拷贝问题)。文章通过代码示例说明了这些函数的使用场景和注意事项,强调在资源管理类中必须正确实现这些函数以避免内存泄漏等问题。

2026-01-17 15:15:08 891

原创 【C++】类和对象(一)

本文介绍了C++中类的定义与使用,主要包括:1)类定义的基本格式、访问限定符和类域概念;2)类的实例化过程及对象内存分配规则;3)this指针的工作原理。文章通过对比C语言和C++实现栈的方式,展示了面向对象编程的封装特性。重点内容包括:类成员默认访问权限、成员函数内联特性、对象内存对齐规则,以及编译器自动添加的this指针机制。

2026-01-14 11:22:20 984

原创 【C++】初识C++

本文介绍了C++基础语法要点,包括:1)第一个C++程序结构;2)命名空间的定义与使用,解决命名冲突问题;3)C++输入输出流的使用;4)缺省参数的设置规则;5)函数重载的实现方式;6)引用的概念、特性及使用场景;7)内联函数的作用;8)nullptr替代NULL的优势。重点讲解了命名空间的作用域隔离、引用与指针的区别、函数重载的条件等核心概念,帮助理解C++特有的语法特性及其设计思想。

2026-01-12 14:53:02 714

原创 【数据结构】排序

本文系统介绍了常见排序算法及其实现。主要内容包括:1)排序基本概念(稳定性、内外排序);2)四大类排序算法(插入、选择、交换、归并)的具体实现,包含直接插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序和归并排序的C语言代码;3)各算法的时间/空间复杂度及稳定性分析。实验数据展示了VS2026下处理10万数据时各算法的性能表现,其中快速排序和归并排序表现最优。文章详细阐述了每种算法的核心思想、特性及优化方法,为排序算法的学习和应用提供了全面参考。

2025-12-13 22:18:51 669

原创 【数据结构】二叉树OJ

本文整理了8个二叉树相关算法题的C语言实现,包括单值二叉树判断(LeetCode965)、相同树判断(LeetCode100)、对称二叉树(LeetCode101)、三种遍历方式(前序144、中序94、后序145)、子树判断(LeetCode572)以及牛客网的二叉树遍历。所有解法均采用递归思路,核心思想是通过比较节点值和递归处理左右子树来实现各种二叉树操作。代码结构清晰,每个问题都包含完整的结构体定义和递归函数实现,适合作为二叉树算法的学习参考。

2025-12-02 08:36:28 938

原创 【数据结构】堆的原理与C语言实现

本文系统介绍了堆数据结构及其应用。主要内容包括:1.堆的基本概念与性质,分为大根堆和小根堆;2.堆的实现方法,详细阐述了向下调整算法、堆创建、插入删除操作及完整代码实现;3.堆的两个重要应用场景:堆排序算法(包括升序和降序实现)和TOP-K问题解决方案。文章通过完整代码示例展示了堆的具体实现过程,并分析了其时间复杂度。堆作为一种高效的完全二叉树结构,在排序和优先级队列等场景中具有重要应用价值。

2025-12-02 08:00:39 880 2

原创 【数据结构】二叉树介绍及C语言实现链式二叉树

本文系统介绍了树和二叉树的数据结构。首先阐述了树的基本概念,包括节点度、叶子节点、双亲节点等术语,以及树的表示方法。重点讲解了二叉树的定义、特性(如满二叉树和完全二叉树)及其数学性质。详细展示了二叉树的链式存储实现,包括创建、销毁、遍历(前序、中序、后序)等核心操作,并提供了节点统计、查找等实用功能的递归实现代码。全文通过清晰的函数定义和测试案例,完整呈现了二叉树的C语言实现方案,为理解和应用这一重要数据结构提供了实践指导。

2025-11-30 21:53:06 847

原创 【数据结构】链表OJ

定义两个新链表,一个less,一个great,遍历原链表,将原链表中val值比x小的结点插入到less链表中,val值比x大的插入到great链表中,最后将great最后一个结点的next指向空,并将less和great连接起来。将链表的后半部分反转,两个指针分别从开头和中间开始走,当两个指针指向的结点的val值不同时返回false,当从中间开始走的结点走到NULL时说明原链表为回文结构,返回true。如果相交,求出两个链表长度的差值gap,让较长的链表上的指针先走gap步,再让两个链表上的指针同时走。

2025-11-26 13:43:49 913

原创 【数据结构】队列简单介绍及C语言实现链式队列

队列是只允许在一端进行插入操作,在另一端进行删除操作的特殊线性表。队列中的数据元素遵循先进先出FIFO(First In first Out)的原则。入队列:进行插入操作的一段称为队尾出队列:进行删除操作的一段称为队头}QNode;int size;}Queue;// 初始化// 销毁// 队尾插入// 队头删除// 取队头数据// 取队尾数据// 返回队列元素个数// 判空使用数组实现队列会出现假溢出现象,可以使用循环队列避免假溢出。

2025-11-20 13:31:10 657

原创 【数据结构】栈:C语言实现支持动态增长的顺序栈

int top;// 栈顶// 容量}ST;// 初始化// 销毁// 入栈// 出栈// 获取栈顶元素// 判空// 获取元素个数。

2025-11-16 14:59:43 215

原创 【数据结构】链表介绍及代码实现

链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。与顺序表不同的是,链表是由一个个节点/结点组成的,每个结点有两个组成部分:当前节点要保存的数据和保存下一个结点的地址(指针变量)因为链表的每个结点都是独立申请的(即需要插入数据时才申请一块结点的空间),所以需要通过指针变量保存下一个结点的地址才能从当前结点找到下一个结点。链表的结点也是使用结构体保存,假设当前链表保存的数据是整型数据int data;// 结点数据。

2025-10-11 14:49:20 959

原创 【数据结构】顺序表的应用:基于动态顺序表实现通讯录

因为顺序表中不仅可以保存内置类型,还可以保存自定义类型,所以在Contact.h中定义personInfo结构体用来保存联系人信息,并给该类型起别名为PeoInfo为了方便修改,可以将结构体中的数组大小定义为常量// 定义联系人结构// 姓名、性别、年龄、电话、地址int age;}PeoInfo;因为顺序表中存储的数据是自定义类型数据,所以需要在SeqList.h中修改。此处修改完成会出现很多报错,将SeqList.c中报错的代码暂时注释掉即可。

2025-10-10 17:26:02 352

原创 【数据结构】顺序表介绍及代码实现

这一步在SeqList.h中完成在SeqList.h中需要包含的头文件有:stdio.h,stdlib.h(动态申请内存)#pragma once //确保头文件只被编译一次,防止重复包含#include<stdlib.h> //动态申请内存的头文件#define SLDataType int //给int起别名为SLDataType,代表顺序表存储的数据类型,方便后续修改int size;//有效数据个数//空间容量}SL;//定义顺序表的结构,并给顺序表重命名为SL。

2025-10-08 16:43:21 640

原创 【数据结构】复杂度

数据结构(data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。算法(Algorithm)就是定义良好的计算过程,取一个或一组的值为输入,并产生一个或一组值作为输出。简单来说算法就是一系列计算步骤,用来将输入数据转化成输出结果。

2025-10-06 20:57:42 736

原创 【C语言】动态内存管理

在学习动态内存管理之前,我们知道两种内存开辟的方式上述开辟内存空间的方式有两个特点:空间开辟的大小是固定的;数组在声明时必须指定数组的长度,数组空间一旦确定大小就不能再调整。但对于空间的需求不仅仅只有上述的情况。有时候需要的空间大小只有在程序运行时才知道,那么上述两种开辟内存空间的方式就不能满足了。C语言引入了动态内存开辟,让程序员可以自己申请和释放空间,就比较灵活了;但相应的,如果不规范使用,也会有一些风险。

2025-10-04 11:52:15 995

原创 【C语言】指针(4)——strlen与sizeof;指针代码题目

如果操作数是类型,计算的是使用类型创建的变量所占内存空间的大小。strlen统计的是从strlen函数的参数str的地址开始,直到'\0'之前的字符串的字符个数。3.关注内存中是否有'\0',如果没有'\0',就会持续往后找,可能会越界。sizeof(数组名),数组名表示整个数组,计算的是整个数组的大小;2.strlen是求字符串长度的,统计的是'\0'之前字符个数。sizeof(数组名)计算的是整个数组的大小,单位是字节。&数组名,数组名表示整个数组,取出的是整个数组的地址;

2025-09-19 22:35:41 600

原创 【C语言】指针(3)——更多指针类型:数组指针、函数指针;回调函数

函数指针变量是用来存放函数地址的,未来通过地址能够调用函数。总结:二维数组传参,形参可以写成指针形式,也可以写成数组形式。4.函数指针变量4.1函数指针变量的创建函数指针变量是用来存放函数地址的,未来通过地址能够调用函数。通过函数结果可以发现,函数名和&函数名都是函数的地址。要将函数的地址存放起来,就需要创建函数指针变量。parr1先和[]结合,说明parr1是数组,数组的内容是int(*)()类型的函数指针。

2025-09-16 07:38:59 1171

原创 【C语言】指针(2)——指针与数组

可以看出数组名是数组首元素(第一个元素)地址。在两种情况下数组名不代表数组首元素地址,而是代表整个数组:sizeof(数组名):sizeof中单独放置数组名,数组名表示整个数组,计算的是整个数组的大小,单位是字节。&数组名:这里的数组名表示整个数组,取出的是整个数组的地址(与数组首元素地址的值相同,但数组地址+1是跳过整个数组)。数组名是数组首元素地址时,类型是type*,+1就是跳过一个sizeof(type)。数组名是数组地址时,类型是type*[],+1就是跳过整个数组。

2025-09-10 14:28:37 796

原创 【C语言】指针(1)——指针简单介绍及指针相关运算

计算机中最小的单位是比特位bit,可以用来存储1个二进制位内存单元编号 == 地址 == 指针计算机中的编址,不是把每个字节的地址记录下来,而是通过硬件设计完成的。地址总线:32位机器有32根地址总线,可以表示2^32种含义,每种含义表示一个地址。

2025-09-07 11:39:35 792

原创 【C语言】实现辗转相除法求最大公约数

辗转相除法又称欧几里得算法,是指用于计算两个正整数a,b的最大公约数。。应用领域有数学和计算机两个方面。计算公式gcd(a,b) = gcd(b,a mod b)。两个整数的最大公约数是能够同时整除它们的最大的正整数。辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数相除余数的最大公约数。以除数和余数反复做除法运算,当余数为 0 时,取当前算式的除数为最大公约数。例:求24和18的最大公约数当余数为0时当前算式的除数即为最大公约数。

2025-06-01 17:38:05 996 2

原创 【C语言】实现趣味猜数字小游戏

猜数字小游戏是一个经典的代码练习题目,今天我们要通过C语言实现猜数字小游戏。游戏过程:1、电脑生成一个 1~100 范围内的随机数2、玩家猜数字,电脑根据玩家的输入给出反馈(猜大或猜小),直到玩家猜对,游戏结束。

2025-05-30 18:58:54 1329

空空如也

空空如也

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

TA关注的人

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