- 博客(30)
- 收藏
- 关注
原创 数据结构--二叉树(链式结构、C语言实现、层序遍历)
/ 二叉树节点结构体// 指向当前结点左孩子// 指向当前结点右孩子// 当前结点值域}BTNode;BTNode结构体通过data存储节点数据,并用left和right两个指针分别指向节点的左孩子和右孩子,以此串联形成二叉树的分支结构,是构建二叉树的基本单元。
2026-04-23 23:00:27
929
原创 数据结构--队列(C语言实现)
/ 队列节点结构体//结点存储的数据//指向下一个节点}QueueNode;// 队列管理结构体(头尾指针+size)// 队头指针// 队尾指针int size;// 有效元素个数}Queue;这段代码定义了链式队列的QueueNode是队列的基本节点,用于存储数据和指向下一节点的指针,负责串联数据形成链表结构Queue是队列管理结构体,通过队头指针phead队尾指针ptail快速定位队列首尾以实现高效入队和出队操作,并用size。
2026-04-20 19:44:27
1326
原创 数据结构--带头双向循环链表(C语言实现)
在实现链表功能前,我们先定义节点结构和数据类型#pragma once // 防止头文件重复包含// 重定义链表存储的数据类型,方便后期修改类型(如改为char/double)// 带头双向循环链表节点结构// 节点存储的数据// 前驱指针:指向当前节点的上一个节点// 后继指针:指向当前节点的下一个节点}LTNode;核心结构说明:使用typedef重定义数据类型,后期只需修改这一行,就能让链表存储任意类型数据;prev指针:双向链表核心,让每个节点能快速找到前驱节点;next。
2026-04-15 13:23:04
1078
1
原创 C语言-----扫雷游戏
• 使⽤控制台实现经典的扫雷游戏• 游戏可以通过菜单实现继续玩或者退出游戏• 扫雷的棋盘是9*9的格⼦• 默认随机布置10个雷• 可以排查雷:◦ 如果位置不是雷,就显⽰周围有⼏个雷◦ 如果位置是雷,就炸死游戏结束◦ 把除10个雷之外的所有⾮雷都找出来,排雷成功,游戏结束。
2026-04-14 13:09:49
15958
18
原创 数据结构Stack(C语言--用数组实现栈)
/ 给 int 类型起别名 StackDataType// 好处:以后想把栈存 char/double 时,只改这一行就行// 栈的结构体定义// 指向动态开辟的数组(真正存数据的地方)int top;// 栈顶标记:**指向 下一个要入栈的位置下标**(初始化为 0)// 栈当前最大容量(数组能存多少个元素)} ST;// ST 是结构体 Stack 的别名,方便使用:给数据类型起别名,方便修改ST:结构体别名,简化代码Data:动态数组,存真正的数据top。
2026-04-14 13:09:23
1207
原创 C++入门(namespace、cout&cin、缺省参数、函数重载、引用&、inline内联函数、nullptr)
需要使⽤到namespace关键字,后⾯跟命名空间的名字,然后接⼀对{}即可,{}中即为命名空间的成员。命名空间中可以定义变量/函数/类型等// A是命名空间的名字,⼀般开发中是⽤项⽬名字做命名空间名。//变量 全局变量必须初始化(避免未定义行为)int Add(int right, int left) //函数struct Node //类型int val;(2)使用namespace的三种方法方式1:作用域解析符(推荐,最安全)明确指定使用哪个命名空间的成员,不会引发命名冲突。
2026-04-09 20:54:46
1765
1
原创 数据结构--单链表(C语言实现)
/ 给 int 类型起别名 SLTDataType// 好处:以后要修改链表存储的数据类型(比如改成 char、float),只改这一行即可,不用到处修改// 定义单链表的节点结构体// 每个节点包含:数据域 + 指针域// 数据域:存储当前节点的数据// 指针域:指向**下一个节点**的地址// 因为下一个节点也是 SListNode 类型,所以用 struct SListNode*}SLTNode;// SLTNode 是结构体 SListNode 的别名,方便使用。
2026-04-09 20:54:34
1478
原创 双指针算法--移除元素、删除有序数组中的重复项、合并两个有序数组
目标:将nums2合并到nums1中,使合并后的nums1仍保持非递减序,原地修改(不使用额外数组)。输入:两个非递减序数组nums1(长度m+n,前m个有效元素)和nums2(长度n,全为有效元素)。若从数组开头合并(正向遍历),nums1的有效元素可能被nums2的元素覆盖,导致数据丢失。利用nums1末尾的n个预留空间,从后往前填充较大元素,避免覆盖有效数据。l3:指向nums1中待填充的位置(初始值(m+n)-1,即数组最后一位)。l1:指向nums1有效元素的末尾(初始值m-1)。
2026-04-06 19:01:08
914
原创 数据结构---顺序表
SeqList.h//定义动态顺序表的结构// 1. 数据类型重定义:将int命名为SLDataType// 作用:统一管理存储类型,后续若需存储其他类型(如float、结构体等),仅修改此处即可,提升代码可维护性// 2. 定义动态顺序表的结构体类型,最终重命名为SL(简化变量定义)typedef struct SqeList // 注:结构体名应为SeqList(顺序表的规范拼写,此处SqeList可能为笔误)// 指向动态分配的数组的指针,用于实际存储元素。
2026-04-04 23:00:47
1503
原创 函数(函数的概念、库函数、自定义函数、形参和实参、return语句、数组做函数参数、嵌套调用和链式访问、函数的声明和定义、static和extern)
return_type fun_name(形式参数) {•:是⽤来表⽰函数计算结果的类型(intfloatdoublechar…),返回类型可以是void,表示什么都不返回•fun_name:是函数名,函数名尽量要根据函数的功能起•形式参数:函数的参数也可以是void,明确表⽰函数没有参数。如果有参数,要交代清楚参数的类型和名字,以及参数个数•{}:括起来的是函数体写⼀个除法函数,完成2个浮点型变量的除法法操作return z;int main()//输入。
2026-03-29 14:47:41
4818
3
原创 C语言--变量(全局变量、局部变量、初始化)
在大括号外部定义的变量就是全局变量,全局变量的使用范围更广,整个工程中想使用,都是有办法使用的。在大括号内部定义的变量就是局部变量,局部变量的使用范围是比较局限的,只能在自己所在的局部范围内使用的。
2026-03-29 14:47:34
2174
原创 时间复杂度和空间复杂度
文章摘要:本文系统介绍了算法复杂度分析的核心概念。时间复杂度通过T(N)函数定量描述算法执行次数,采用大O渐进表示法(保留最高阶项、去除系数)来比较算法效率。常见时间复杂度包括O(1)、O(N)、O(N^2)、O(logN)等,并通过7个典型示例展示了计算方法,强调关注最坏情况。空间复杂度则计算算法运行所需的额外临时空间。二者共同构成评估算法性能的重要指标,其中时间复杂度更关注执行次数的量级比较,而非精确计算。
2026-03-28 14:44:59
1931
原创 复杂度算法题——旋转数组(三种思路)
证明反转可行性:假设要把 [A][B] 变成 [B][A](A是前半段,B是后半段):先反转A:得到 [A’][B](A’是A的反转)再反转B:得到 [A’][B’](B’是B的反转)最后反转整个数组:[A’][B’] 整体反转后,会变成 [B][A](因为B’反转回B,A’反转回A,且顺序交换)
2026-03-28 14:44:43
1275
1
原创 算数操作符、赋值操作符、单目操作符、强制类型转换
⽤来改变⼀个值的正负号(用法与日常数学相同),负数的前⾯加上 - 就会得到正数,正数的前⾯加上。•强制类型转换都是万不得已的时候使⽤,如果不需要强制类型转化就能实现代码,最好不过。的是int类型, 5.21是double类型,两边的类型不⼀致,编译器会报警告。运行 a = 2 + 1 = 3,所以第二个 printf输出的是3。运行 a = 2 - 1 = 1,所以第二个 printf输出的是1。对正负值没有影响,是⼀个完全可以省略的运算符,但是写了也不会报错。代码的执⾏细节,我们可以这样写。
2025-11-16 15:06:35
2457
1
原创 VS2022输入 scanf 报错解决方法
•将scanf替换为scanf_s•scanf_s是VS提供的一个函数,scanf_s函数的使用和scanf是•scanf_s是VS提供的一个函数,,那么我们所写的代码就存在跨平台的问题。
2025-03-17 21:11:45
1377
原创 分支和循环(if语句、关系操作符、条件操作符、逻辑操作符&& ||、!|、switch语句、while循环、for循环、do-while循环、break和continue语句、goto语句)
•if•表达式为真,则语句执行;表达式为假,则语句不执行(•判断一个整数是否为奇数。
2025-03-16 23:22:34
1427
原创 如何在 VS编译器上使用 C99规定的变长数组------使用Clang工具
VS编译器默认处理代码的工具是,而工具是无法处理变长数组的,这个时候我们就要换一个处理代码的工具了----Clang。
2025-03-15 23:46:21
1541
2
原创 数组(一维数组、二维数组、变长数组)
•• 数组中存放的是1个或者多个数据,但是数组元素个数不能为0。• 数组中存放的多个数据,类型是相同的•数组分为⼀维数组和多维数组。
2025-03-14 19:37:31
3521
原创 C语言---猜数字游戏
判断输入的数与随机数那个大,输入的数比较大就输出猜大了,输入的数比较小就输出猜小了,相等就输出猜对了,并且停止循环(运用。函数设置随机数,为确保每次运行程序时生成的随机数序列不同,通常需要使用。当然还可以改进,比如显示范围,多少次机会等等。,从而使得每次运行程序生成的随机数序列不同。等于其他数字时提示输入错误,重新输入。作为种子,意味着随机数种子会根据当前。语句实现,在上面这个代码中,会跳到。到这猜数字的基本思路就完成了。表示有五次猜数字的机会。3.游戏–设置随机数。每次猜完机会减一,即。
2025-03-14 19:37:06
2005
原创 C语言的常见概念
简单来说C语言就是与计算对话的语言。C语言提供了接近硬件的控制能力,允许程序员直接操作内存地址。它语法简洁,结构化程度高,易于学习。其编写的程序可以在不同的操作系统和硬件平台上运行,只需要适当的编译器,还提供了丰富的数据类型和操作符,使得编程更加灵活。支持多种编程范式,包括结构化编程、泛型编程等,现在被广泛用于系统软件、嵌入式系统、操作系统、驱动程序、高性能服务器和客户端应用等。C语言拥有一个强大的标准库,提供了许多通用的函数和工具。
2025-03-13 22:40:38
1663
1
原创 printf 与前置++、后置++、前置--、后置-- 的关系
printf函数会从最右边的带有 后置++ 或 后置-- 的代码 开始运行输出,然后再跳到下一个带有 后置++ 或 后置-- 的代码 运行输出,计算出最终的值后。•左边已经没有带有 后置++ 的a,这时候 编译器就会从 最右边开始 向左没有带 操作符的a 输出 最终的值,即 4;到这我们已经计算出后值类型 :第(4)a--的值 1和第(1)a++的值1了;第(2)a 不带符号跳过它,来到带有符号的第(1)a++,后置类型,先 从右向左 计算最终的值,再 从右向左 输出最终的值。
2025-03-11 19:51:48
1837
原创 VS2022监视窗口怎么打开
如果不先进行调试直接点击调试+窗口是下面的情况。—>监视(W)—>四个窗口随便选一个。就可以一步一步的监视每一句代码啦。1.写好代码后,进行调试按。
2025-03-11 19:51:13
2400
1
原创 VS2022实用调试技巧
•Debug被称为调试版本,包含调试信息,并且不做任何优化,便于程序员调试程序•Release被称为发布版本,里面的程序往往已经被程序员进行了各种优化,使得程序在代码大小和运行速度上都是最优的—>用户使用。
2025-03-10 20:38:20
3652
原创 C语言的数据类型(整形int、字符型char、浮点型float、double)
•“类型”指的是相似数据所拥有的共同特征,编译器只有知道了数据的类型,才知道怎么操作数据。•“整数类型”用来描述整数,比如123•“字符类型”用来描述字符,比如'a''b''c'"asdfg"•“浮点型类型”用来描述小数,比如1.13.14。
2025-03-05 21:37:41
3381
原创 详解 scanf 和 printf(占位符、printf、scanf的返回值、printf的输出格式、scanf的输入格式)
•printf的作⽤是将参数⽂本输出到屏幕•printfprintfprintf代表输出打印,f代表format(格式化),format表⽰可以定制输出⽂本的格式,所以详细来说printf是•printf是在标准库的头⽂件stdio.h定义的。使⽤这个函数之前,,否者编译器会报错•加上去就不会了•屏幕上打印I LOVE C•printf不会在⾏尾⾃动添加换⾏符,运⾏结束后,光标就停留在输出结束的地⽅,•如果想要换行打印,可以在输出⽂本的结尾,添加⼀个换⾏符\n•没换行打印•换行打印。
2025-03-05 21:37:02
2022
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅