自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++--stack和queue

适配器是一种设计模式,将一个类的接口转换成用户希望的另一个接口。stackqueue本身不是容器,而是对已有容器的接口进行包装,称为容器适配器。public:// 大堆需要 operator<if (_year!if (_month!// 小堆需要 operator>if (_year!if (_month!// 大堆// 小堆大堆需要operator<,小堆需要operator>。或者通过仿函数/函数对象指定比较规则。

2026-07-12 06:35:44 545 15

原创 C++--list

底层是链表,访问第 n 个元素需要 O(n) 遍历。list 是非连续空间,每个节点独立申请内存,不需要预留空间,也没有"容量"的概念。等操作跳转到相邻节点,原生指针做不到),而 vector 的迭代器才是原生指针。因为链表插入只改指针指向,不搬移已有节点,也不扩容。| 任意位置插入删除 | O(n),需搬移元素 || 随机访问 | O(1) | O(n) |(哨兵节点),不是最后一个有效元素。,其他节点的迭代器不受影响。返回头结点下一个节点的值,返回头结点上一个节点的值。的值,保证区间对称。

2026-07-10 21:21:33 397 12

原创 C++--vector

迭代器底层是原生指针T*。当 vector 底层空间发生变化(扩容),旧空间被释放,迭代器仍指向已释放的内存,继续使用会导致程序崩溃或未定义行为。end()

2026-07-09 14:34:48 468 11

原创 C++--string

输入一行字符串,输出最后一个单词的长度。必须用getline而非cin >>,因为cin >>遇到空格就结束读取。while (getline(cin, line)) { // 必须用 getline,不能用 cin>>// 找到最后一个空格// 最后一个单词长度return 0;

2026-07-08 14:44:55 487 10

原创 C++--模版初阶

返回值类型 函数名(参数列表) {// 函数体class 类模板名 {// 类内成员定义// ❌ 不建议:声明和定义分离到 .h 和 .cpp // 会出现链接错误!// ✅ 建议:声明和定义放在同一个头文件中原因后续章节会讲解(模板实例化需要完整定义可见)│ C++ 模板初阶总结 ││ ││ 【泛型编程】 ││ 目的:编写与类型无关的通用代码 ││ 核心:模板是泛型编程的基础 ││ ││ 【函数模板】 ││ 格式:template<typename T> │。

2026-04-11 15:22:23 315 16

原创 C++--内存管理

/ malloc/free:只开空间,不调用构造/析构free(p1);// new/delete:开空间 + 调用构造/析构// 调用构造函数delete p2;// 调用析构函数// 数组形式// 调用10次构造函数// 调用10次析构函数return 0;1. 调用 operator new 申请空间2. 在申请的空间上执行构造函数1. 在空间上执行析构函数。

2026-04-11 12:55:31 544 8

原创 从零开始学C++--类和对象

类中有动态内存分配(new/malloc类中有文件操作、网络连接等资源。

2026-04-07 14:30:35 510 15

原创 从零开始学习C++ -- 基础知识

定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员,命名空间中可以定义变量、函数、类型等。namespace本质是定义一个域,这个域跟全局域各自独立,不同的域可以定义同名变量,所以下面的rand不冲突。C++中域有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找一个变量/函数/类型出处(声明或定义)的逻辑,所以有了域隔离,名字冲突就解决了。

2026-03-26 19:27:28 1529 21

原创 别再死记!彻底吃透经典排序算法

🔥 零基础也能看懂 | 💻 全程可运行 C 代码 | ⚡ 复杂度一眼对比 | ❌ 避开 90% 新手误区。

2026-03-25 15:49:16 428 12

原创 二叉树的遍历--前中后序、层序遍历

在学习二叉树之前,我们要先创建一个二叉树,由于此时我们不太了解二叉树的真正创建方式,因此我们先手动快速创建一颗二叉树来学习。访问结点所做的操作依赖于具体的应用问题。遍历是二叉树上最重要的运算之一,也是二叉树上进行其它运算的基础。NLR、LNR和LRN分别又称为先根遍历、中根遍历和后根遍历。学习二叉树结构,最简单的方式就是遍历。由于被访问的结点必是某子树的根,所以。其中的部分内存空间是重复利用的。对于中序遍历和后序遍历也是同理。

2026-03-16 10:31:53 678 13

原创 二叉树关于堆的学习

向上调整过程中,调到最后不能用parent >= 0作为结束循环的条件,因为当parent = 0时,parent=(child-1)/2永远等于0,因此用child来做判断。HeakPop删除的是堆顶(根位置),不能使用覆盖方法,不然会使堆的数据关系全乱了。过程:先将堆顶数据与数组最后一个数据互换,然后删除最后一个数据,再进行向下调整算法。树结构,既要保存值域,也要保存节点与节点之间的关系。顺序存储就是用数组来存储,只适合完全二叉树,因为不是完全二叉树会有空间的浪费。要前k小数据就要求比堆顶数据小。

2026-03-11 16:56:18 460 6

原创 系统认识栈和队列

队列是只允许在一端插入数据,在另一端删除数据的特殊线性表,先进先出。1.栈是后进先出的,它既可以用数组,也可以用单向链表实现。栈就是一种实现数据后进先出的数据结构,是一种特殊的线性表。2.队列是先进先出,它既可以靠顺序表也可以用链表实现。

2026-03-10 15:05:00 207

原创 关于链表的成环问题的深入研究

所以该等式不成立,所以当fast每次走3个节点,slow每次走一个节点时,fast一定能追上slow。fast走的距离:L+(x-1)* C+a+N = L+x。此时头结点和相遇节点同时走,在环起始节点相遇便得到证明。化简得:L=(x-1)* C+C-N。因为(x+1)*偶数 = 偶数。偶数=(x+1)*偶数-奇数。此时:N是奇数,C是偶数。fast走的举例是:L+x。即2L=(x+1)*C-N。则有2(L+N)= L+x。slow走的距离:L+N。slow走的距离是:L。

2026-03-06 11:07:58 60 1

原创 照着做轻松实现项目--贪吃蛇小游戏

Windows 这个多作业系统除了协调应⽤程序的执⾏、分配内存、管理资源之外, 它同时也是⼀个很⼤的服务中⼼,调⽤这个服务中⼼的各种服务(每⼀种服务就是⼀个函数),可以帮应⽤程序达到开启视窗、描绘图形、使⽤周边设备等⽬的,由于这些函数服务的对象是应⽤程序(Application), 所以便称之为 Application Programming Interface,简称 API 函数。WIN32 API也就是Microsoft Windows 32位平台的应⽤程序编程接⼝。

2026-02-28 13:00:44 868 2

原创 学习预处理

C语言设置了一些预定义符号,可以直接使用,预定义符号也是在预处理阶段处理的。__FILE__ //进行编译的文件__LINE__ //文件当前的行号__TIME__ //文件被编译的时间__DATA__ //文件被编译的日期__STDC__ //如果编辑器遵循ANSI C,其值为1,否则未定义//例子:(续行符 \ ,后面不能有空白)100registerfor;;//对于for(),初始值、判断条件、更新都可省略,但判断条件要省略的话,就进入了死循环printf;

2026-02-09 07:43:18 1282 5

原创 编译和连接

预处理阶段主要处理那些源文件中#开始的预编译指令。编译器所做的分析是语义的静态分析。静态语义分析包括类型的匹配,类型的转换等。链接过程主要包括:地址和空间分配,符号决议和重定位等这些步骤。在预处理阶段,源文件和头文件会被处理成 .i 的文件。在ANSI C的任何一种实现中,存在两个不同的环境。又可以分成:预处理、(预编译)、编译、汇编三个过程。解决的是一个项目中多文件、多模块之间互相调用的问题。根据汇编指令和机器指令一一进行翻译,不做指令优化。将汇编代码转变成机器可以执行的指令。,生成相应的汇编代码文件。

2026-02-07 12:49:13 1345 4

原创 学习文件操作

如果没有文件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就会丢失,如果要将数据进行持久化保存,我们可以使用文件。磁盘(硬盘)上的文件是文件。程序设计中,一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类)。int main()//1.打开文件return 1;//2.读文件//3.关闭文件fclose(pf);pf = NULL;return 0;int main()//1.打开文件return 1;//2.读文件。

2026-02-06 09:44:09 1032 4

原创 动态内存管理

int s = 4,这种空间开辟大小是固定的。

2026-02-01 12:55:21 935 4

原创 学习自定义类型:联合枚举

/联合体类型的声明union Unchar c;int i;

2026-01-29 18:54:11 527 5

原创 理解结构体

所以不能对位段的成员使用&操作符,这样就不能使用scanf直接给位段的成员输入值,只能是先输入放在一个变量中,然后赋值给位段的成员。1.位段的成员必须是int 、unsigned int 或 signed int,在c99中位段成员的类型也可以选择其他类型。Node是对前面的匿名结构体类型的重命名产生的,但在匿名结构体内部提前使用Node类型创建成员变量,这是不行的。2.位段的空间上是按照需要以4个字节(int)或者1个字节(char)的方式来开辟的。计算结构体的大小 ------- 结构体内存对齐。

2026-01-28 19:25:02 910

原创 理解整数和浮点数在内存中的存储方式

E是一个无符号整数,若E为8位,取值范围是0 – 255,若E为11位,取值范围是 0 – 2047;E是可能存在负数的,所以存入内存时,对于8位的E,真实值加上中间数127;有符号位的整数,三种表示方法均有符号位和数值为两部分,符号位都用0表示正,用1表示负,最高的一位是符号位,其余的都是数值位。,默认写成1.xxxxxx形式,因此1可以省掉,只保存xxxxxx部分,在读取的时候再把1加上。**反码:**将原码的符号位保持不变,其他位依次按位取反就可以得到反码。**补码:**反码+1就得到补码。

2026-01-27 15:40:49 800 2

原创 完全理解字符函数、字符串函数和内存函数

也可以了解一下perror函数,它是直接将错误信息打印出来。perror函数打印完参数部分的字符串后,再打印一个冒号和一个空格,再打印错误信息。这些函数使用都需要一个头文件是。使用转换函数可将上述代码优化。

2026-01-24 22:59:41 832 2

原创 【C语言】深度理解指针:从内存到本质,一篇真正讲透指针的文章

❌ 野指针int *p;*p = 10;❌ 悬空指针free(p);*p = 10;❌ 越界访问int arr[5];👉 所有指针错误,最终都是非法内存访问指针不难,难的是你是否真正理解了内存。👉 你能清楚说出每一行代码在访问哪一块内存。

2025-12-22 11:37:02 1101 3

原创 C语言分支循环核心用法

【代码】C语言分支循环核心用法。

2025-11-24 08:34:32 251

原创 双非二本大学生学习编程规划

1.自我介绍:我是来自德州学院计算机与信息学院的24届学生,经过大一一整年的不学无术,导致我现在对我的前途充满担忧,我觉得打破这种担忧的最好方式就是找一份感兴趣、可以坚持学习且能不断提高自己的一件事情去做,我们每个人都一样,要发觉自己感兴趣的事情,然后坚持去提升,对我来说,接下来最重要的事情就是提升自己的编程能力。至于未来能拿到什么样的薪资,我觉得主要取决于我接下来对编程的学习。4.每周学习时长:每周规划学习40个小时,对于现在大二的我来说这已经是不可选的了,要想获得好的offer,必须提升自己的能力。

2025-11-18 17:00:23 227

空空如也

空空如也

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

TA关注的人

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