自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【C++进阶】多态:虚函数、重写/覆盖、纯虚函数与虚函数表底层原理

多态是一个继承关系下的类对象调用同一个函数产生了不同的行为。(比如Student继承了Person,Person对象全价买票,Student对象优惠买票)

2026-05-11 08:00:00 149

原创 【Web前端】JavaScript(一)—— JS 基础语法

本文介绍了JavaScript的基础知识,主要包括以下内容: JavaScript概述:解释JS作为脚本语言的特点、应用场景(网页开发、游戏、服务器等)以及与HTML/CSS的关系(分别负责结构、表现和行为)。 运行机制:说明JS在浏览器中的执行过程,包括JS引擎的工作原理和浏览器渲染流程。 基本语法: 三种引入方式(行内式、内嵌式、外部式) 输入输出方法(prompt、alert、console.log) 变量声明(var/let)和动态类型特性 基本数据类型(number、boolean、string等

2026-05-01 08:00:00 366

原创 【Web前端】CSS(二)——常用样式、盒模型与弹性布局

本文介绍了CSS中常用的字体和文本属性设置方法。主要内容包括:1)字体属性设置,如font-family定义字体类型、font-size调整字号、font-weight控制粗细、font-style设置斜体;2)文本属性设置,如color定义颜色、text-align控制对齐方式、text-decoration添加装饰线、text-indent实现首行缩进;3)行高line-height的调整方法。通过代码示例和效果图展示了各属性的具体应用,帮助开发者掌握CSS文本样式的基本控制技巧。文章还特别说明了RGB

2026-04-29 08:00:00 342

原创 【Web前端】CSS(一)——基础语法与选择器

CSS简介及选择器使用 CSS(层叠样式表)是用于控制网页样式的标记语言,能够精确控制元素排版并实现美化效果。CSS的基本语法由选择器和声明块组成,选择器用于定位元素,声明块包含样式属性。 CSS有三种引入方式:内部样式表(style标签)、行内样式表(style属性)和外部样式表(link引入)。其中外部样式表最常用,实现样式与结构完全分离。 选择器分为基础选择器和复合选择器。基础选择器包括: 标签选择器:选择同类型标签 类选择器:通过class属性差异化选择 id选择器:通过唯一id选择元素 通配符选择

2026-04-27 08:00:00 331

原创 【C++进阶】详解继承体系:作用域、默认成员、友元、静态成员与组合关系

Person类是基类,也称作父类;Student是派生类,也称作子类。

2026-04-24 08:00:00 338

原创 【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 641

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

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

2026-01-30 08:00:00 566

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

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

2026-01-28 08:00:00 958

原创 【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 1362

原创 【C++初阶】auto关键字、范围for循环与迭代器详解

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

2026-01-21 08:00:00 927

原创 【C++初阶】C/C++内存分布、new/delete与模板入门

C/C++内存管理及模板编程摘要 本文系统介绍了C/C++内存管理机制和模板编程基础。在内存管理方面,详细讲解了C/C++的内存分布(栈区、堆区、数据段和代码段),对比了C语言的malloc/free和C++的new/delete操作,重点分析了它们在处理内置类型和自定义类型时的差异。在模板编程部分,阐述了泛型编程的概念,深入解析了函数模板的定义格式、实例化过程及匹配原则,并介绍了类模板的基本定义和使用方式。文章通过大量代码示例,展示了如何利用模板实现通用性更强的代码,同时强调了模板编程中需要注意的类型匹配

2026-01-20 08:00:00 1262

原创 【C++初阶】类和对象(三):初始化列表、友元与static成员详解

本文摘要主要介绍了C++中构造函数初始化列表、类型转换、static成员、友元和内部类五个关键知识点: 构造函数初始化列表:通过冒号语法初始化成员变量,对引用、const成员等必须使用初始化列表。初始化顺序按声明顺序而非列表顺序。 类型转换:支持内置类型隐式转换为类类型对象,通过explicit禁止隐式转换,类类型对象间也可转换。 static成员:静态成员变量需类外初始化,被所有对象共享;静态成员函数无this指针,只能访问静态成员。 友元:通过friend声明突破封装限制,使外部函数/类能访问私有成员,

2026-01-19 08:00:00 2020

原创 【C++初阶】类和对象(二):默认成员函数全解

本文介绍了C++类中的默认成员函数,重点讲解了构造函数、析构函数和拷贝构造函数。构造函数用于对象初始化,析构函数用于资源清理,拷贝构造函数用于对象拷贝。编译器会自动生成这些函数的默认版本,但默认实现可能不满足需求,特别是涉及资源管理时需手动实现。文章通过代码示例展示了这些函数的用法和注意事项,包括如何避免递归调用、何时需要自定义实现等,为C++类设计提供了实用指导。

2026-01-17 15:15:08 903

原创 【C++初阶】类和对象(一):面向对象基础核心详解

本文介绍了C++中类的定义与使用,主要内容包括:1) 类定义格式,使用class关键字定义类,包含成员变量和成员函数;2) 访问限定符public、private、protected的作用和使用规则;3) 类域的概念及作用域操作符的使用;4) 类实例化对象的过程和对象内存分配规则;5) this指针的原理和使用方法;6) 对比了C语言和C++实现栈的不同方式。C++通过类将数据和方法封装,通过访问控制实现信息隐藏,是面向对象编程的重要特性。

2026-01-14 11:22:20 994

原创 【C++初阶】初识C++:命名空间与引用详解

本文介绍了C++编程基础中的核心概念,包括:1. 第一个C++程序的基本结构;2. namespace命名空间的定义与使用方式;3. C++特有的输入输出方法;4. 缺省参数的特点与使用规范;5. 函数重载的实现机制;6. 引用的概念、特性及其与指针的区别;7. inline内联函数的作用;8. nullptr空指针的引入意义。文章重点阐述了C++相比C语言的新特性,如命名空间解决命名冲突、引用简化参数传递等,并详细说明了各种语法特性的使用场景和注意事项。

2026-01-12 14:53:02 723

原创 【数据结构】排序

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

2025-12-13 22:18:51 672

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

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

2025-12-02 08:36:28 942

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

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

2025-12-02 08:00:39 888 1

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

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

2025-11-30 21:53:06 853

原创 【数据结构】链表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 919

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

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

2025-11-20 13:31:10 668

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

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

2025-11-16 14:59:43 221

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

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

2025-10-11 14:49:20 968

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

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

2025-10-10 17:26:02 356

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

这一步在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 642

原创 【数据结构】复杂度

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

2025-10-06 20:57:42 737

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

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

2025-10-04 11:52:15 998

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

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

2025-09-19 22:35:41 602

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

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

2025-09-16 07:38:59 1176

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

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

2025-09-10 14:28:37 798

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

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

2025-09-07 11:39:35 796

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

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

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

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

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

2025-05-30 18:58:54 1342

空空如也

空空如也

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

TA关注的人

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