- 博客(42)
- 收藏
- 关注
原创 【数据结构】栈与队列
栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,出栈:栈的删除操作叫做出栈。
2025-02-05 00:08:15
875
原创 【数据结构】双向链表
List.hList.cTest.c例1方法:拷贝节点链接在原节点的后面拷贝原节点的random,原节点的random->next拷贝链表解下来,链接成一个新链表,原链表恢复顺序表,链表储存在堆上对顺序表/链表每个位置数据遍历访问/修改 cpucpu不能直接访问内存->cpu高速缓存cpu->缓存,命中,直接访问;不命中,把内存中的数据加载到缓存中再进行访问,但不能把所有数据都加载过去,会将一些数据挤出去,会使用一些算法为什么顺序表缓存利用高而链表缓存利用低:当内存中的数据向缓存中
2025-02-03 12:48:20
564
原创 【数据结构】顺序表和链表
线性表是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串…线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。
2025-01-20 21:36:18
436
原创 【数据结构】复杂度
算法在编写成可执行程序后,运行时需要耗费时间资源和空间(内存)资源。因此衡量一个算法的好坏,一般是从两个维度来衡量的,即时间复杂度和空间复杂度。主要衡量一个算法的运行快慢,而主要衡量一个算法运行所需要的额外空间。在计算 机发展的早期,计算机的存储容量很小。所以对空间复杂度很是在乎。但是经过计算机行业的迅速发展,计算机的存储容量已经达到了很高的程度。所以我们如今已经不需要再特别关注一个算法的空间复杂度。
2025-01-17 12:46:37
757
原创 【重生之我要苦学C语言】动态内存管理
1.栈区 (stack):在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。栈区主要存放运行函数而分配的局部变量、函数参数、返回数据、返回地址等。2.堆区(heap):一般由程序员分配释放,若程序员不释放,程序结束时可能由OS(操作系统)回收。分配方式类似于链表。3.数据段(静态区):(static)存放全局变量、静态数据。程序结束后由系统释放。
2024-11-23 16:50:24
1001
原创 【重生之我要苦学C语言】自定义类型——联合和枚举
像结构体一样,联合体也是由一个或者多个成员构成,这些成员可以不同的类型,但是编译器只为最大的成员分配足够的内存空间。联合体的特点是结构体和联合体内存对比。
2024-11-21 18:37:00
577
原创 【重生之我要苦学C语言】自定义类型——结构体
1.位段的成员必须是int、unsigned int或signed int,在C99中位段成员的类型也可以选择其他类型。2.位段的成员名后边有一个冒号和一个数字。struct S{位段中的位为二进制位struct A{int a;//32个比特位int b;//32个比特位int c;//32个比特位int d;//32个比特位//数字不能超过32struct A{int a : 2;//2个比特位int b : 5;//5个比特位int c : 10;
2024-11-21 15:26:09
945
原创 【重生之我要苦学C语言】 数据在内存中的存储
1.整数在内存中的存储整数的2进制表示方法有三种,即原码、反码和补码有符号的整数,三种表示方法均有和两部分,符号位都是用,最高位的一位是被当做符号位,剩余的都是数值位。正整数的原、反、补码都相同。负整数的三种表示方法各不相同。:直接将数值按照正负数的形式翻译成二进制得到的就是原码。:将原码的符号位不变,其他位依次按位取反就可以得到反码。:反码+1就得到补码。
2024-11-21 00:33:18
712
原创 【重生之我要苦学C语言】C语言内存函数
只关注要拷贝的数据在哪里,要存放到哪里,拷贝几个字节至于内存中存放什么数据,什么类型数据,不重要strcpy,strncpy只适用于字符串memcpy函数不保证重叠内存的拷贝,通常使用memcpy函数拷贝不重叠内存的数据,那么重叠的情况怎么处理?——memmove。
2024-11-19 20:30:04
462
原创 【重生之我要苦学C语言】字符函数和字符串函数
C语言中有一系列的函数是专门做字符分类的,也就是一个字符是属于什么类型的字符的这些函数的使用都需要包含一个头文件是。
2024-11-18 22:43:06
950
原创 【重生之我要苦学C语言】深入理解指针6
sizeof是操作符strlen是库函数,使用时需要包含string.hsizeof计算操作数所占内存大小,单位是字节strlen是求字符串长度的,统计的是\0之前字符的个数sizeof不关注内存中存放什么数据sizeof关注内存中是否有\0,如果没有\0,就会持续往后找,可能会越界。
2024-11-15 17:40:37
604
原创 【重生之我要苦学C语言】深入理解指针5
回调函数就是一个如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,被调用的函数就是回调函数回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应fun为回调函数。
2024-11-13 12:24:30
355
原创 【重生之我要苦学C语言】深入理解指针4
指针指向指针指向结果是一样的字符数组可以存放字符串,常量字符串和数组是非常相似的,也是在一个连续的空间中存放了多个字符,但是问:打印结果答案为:2 3str3和str4完全相同,为了节省内存,str4并不会被创建str1,str2为数组名,是数组首元素的地址,两个数组创建的是不同的空间,首元素地址不同,故str1!=str2str3,str4比较的是两个指针变量中存放的地址,所以str3==str4。
2024-11-04 01:30:00
1155
原创 【重生之我要苦学C语言】深入理解指针2
当const修饰变量时,是无法更该该变量的值的报错:a变成了常变量,a的本质还是变量,但是因为被comst修饰,所以不能改变报错:n是变量,语法限制了n只是不能被修改在c++中,const int n里的n就是常量但这是违反规则的,因为用const修饰的a是不期望被改变的则仍无法进行变量值的修改。
2024-11-02 18:35:49
1302
原创 【重生之我要苦学C语言】深入理解指针(1)
计算机上CPU(中央处理器)在处理数据的时候,需要的数据是在内存中读取的,处理后的数据也会放回内存中将内存划为一个个的内存单元,每个内存单元的大小取一个字节一个比特位可以存储一个2进制的位1或者0每个内存单元(相当于一个宿舍)一个字节里面能放八个比特位(相当于每间宿舍住八个学生,每个学生为一个比特位),每个内存单元都有一个编号(相当于宿舍的门牌号),有了这个编号,CPU就可以快速地找到一个内存空间。
2024-10-31 16:12:38
1224
原创 【重生之我要苦学C语言】操作符详解、结构体与表达式求值过程
struct:关键字tag:名字member-list:成员列表(1个/多个成员)variable-list:变量列表(可有可无)例:描述一个学生:名字——char name[20];年龄——int age;性别——char sex[6];//男/女/保密 一个汉字占两个字符学号——char id[12];//声明一个结构体类型int age;}s4;//s4是一个全局结构体变量//s3是一个全局结构体变量。
2024-10-30 20:17:05
1199
原创 【重生之我要苦学C语言】 函数递归
递归就是递归一定是基于函数的在任何一次函数调用中,都会申请资源,申请的是内存中的资源栈区的资源是的,因此函数。
2024-10-27 12:31:56
738
原创 【重生之我要苦学C语言】函数2---函数的声明与使用/认识static与extern
例:判断闰年先进行定义函数的定义也是一种特殊的声明//是闰年返回1,不是返回0//函数的定义// }// else// 或者//}//判断if (is_leap_year(year)) //函数的调用printf("%d 是闰年\n", year);elseprintf("%d 不是闰年\n", year);return 0;或者先声明后使用//函数的声明只需交代类型和个数即可//判断if (is_leap_year(year)) //函数的调用。
2024-10-24 20:37:02
1398
原创 【重生之我要苦学C语言】猜数字游戏和关机程序的整合
学习新的知识的确不可或缺,但是复习与知识的整合与思考也很重要。“我们终其一生,就是要摆脱别人的期待,找到真正的自己。今天来把学过的猜数字游戏和关机程序来整合一下。如果有不明白的可以看往期的博客。
2024-10-21 15:04:27
681
原创 【重生之我要苦学C语言】分支与循环2--while/for/do-while/goto以及break和continue在不同循环中的辨析~
分支与循环2--while/for/do-while/goto以及break和continue在不同循环中的辨析~
2024-10-15 22:45:07
2279
原创 【重生之我要苦学C语言】printf()与scanf()详介以及如何在VS中使用scanf(保姆级详细版)
printf()与scanf()详介以及如何在VS中使用scanf
2024-10-13 01:29:04
2430
原创 【重生之我要苦学C语言】数据类型与变量(2)
C语言中为了方便运算,提供了一系列操作符,其中有一组操作符叫:算术操作符。,这些操作符都是:操作符也被叫做运算符,是不同的翻译,意思是一样的。
2024-10-12 06:00:00
1614
原创 【重生之我要苦学C语言】C语言数据类型与变量 (看了就懂版)
C语言提供了丰富的数据类型来描述生活中的各种数据。使用整型类型来描述整数,使用字符类型来描述字符,使用浮点型类型来描述小数所谓“类型”,就是相似的数据所拥有的共同特征,编译器只有知道了数据的类型,才知道怎么操作数据1.数组2.结构体(struct)3.枚举(enum)4.联合体(union)
2024-10-11 06:00:00
1229
1
原创 【重生之我要苦学C语言】C语言常见概念~
转义字符,顾名思义,转变原来意思的字符比如输出的结果为:就是一个转义字符,表示在书写连续多个问号时使用,防止他们被解析成三字母词,在新的编译器上没法验证了用于表示字符常量’用于表示一个字符串内部的双引号用于表示一个反斜杠,防止它被解释为一个转义序列符警报,这会使得终端发出警报声或出现闪烁,或者两者同时发生退格键,光标回退一个字符,但不删除字符换页符,光标移到下一页。在现代系统上,这已经反映不出来了,行为改成类似于\v换行符回车符,光标移到同一行的开头。
2024-10-10 12:55:08
2675
原创 【C】数据结构与算法初识
是指算法在执行过程中,随着,算法。它是衡量的一个重要指标在进行算法分析时,语句的的函数,进而分析T(n)随n的变化情况并确定T(n)的,它表示随问题规模n的增大,算法执行时间的增长率和 f(n)的增长率相同,称作算法的渐近时间复杂度**,简称为像这样用来体现算法时间复杂度的记法,我们称之为一般情况下,随着n的增大,0(1):常数阶、O(n):线性阶、0(n²):平方阶…下面会再进行详细介绍。
2024-10-04 23:07:58
846
原创 【C++】 递推----过河卒问题
我想,放假的意义就在于:一个说不起就不起的早晨、一个说不睡就不睡的深夜和一个说不出门就不出门的白天;在棋盘中的任意一个点上有对方的马,记为C点,马所在的点和所有跳跃一步可达的点称为对方马的控制点,小卒不能通过马的控制点。将A,B之前的格全部初始化为1,将马及其控制点标记为0,通过判断是1还是0来判断是否为马的控制点,从而判断马是否挡路。现给定A点位置(0,0),B(m,n)(m,n<=20),C(x,y)且C不与A,B重叠。当行为0,纵为0的时候,只有一条路径(排除B与A点重合的情况)
2024-10-03 18:26:21
1114
原创 【C++】----全排列~
等对于两个数字序列,依次比较例如:比较序列 (1, 2, 3) 和 (1, 2, 4)。首先比较第一位数字都是 1,相等;接着比较第二位数字都是 2,也相等;再比较第三位数字,3 小于 4,所以 (1, 2, 3) 小于 (1, 2, 4)。对应位置上的字符的编码大小例如:比较字符串“apple”和“banana”。首先比较第一位字符,‘a’和‘b’,由于‘a’的编码小于‘b’的编码,所以“apple”小于“banana”
2024-10-03 02:04:54
1645
原创 【C++】----递归与递推~
递归式(递归调用):将原问题分解成若干个子问题的手段* 递归边界*:分解的尽头看一个例子:2 5 8 11 14…你能发现其中的规律吗?显然,这是一个等差数列,每项之间相差3,那么就可以写成,即,假如现在我们要求出第6项的值,那就得知道第五项的值;要求第五项的值,就得知道第四项的值…
2024-10-02 14:32:10
1470
原创 C++----高精度计算减法篇(超详细)
可以看出,从右往左做减法,大数减小数,得数为一个正数,而反过来,小数减大数,则得到的就是在原得数前面加个负号,因此,,这就需要我们``.与高精度加法类似(高精度计算可见上一篇),减法也是从右往左进行运算,所以我们要,得到的是逆序存放的各个位数上的数字,并将其,如下图所示(代码中也会有详细的解释哦~):代码写在main函数中时,string声明字符串,其初始化就是空字符串,但是整型数组不初始化的情况下,则是随机数,一定要初始化为0如有需要改善或是不懂的地方,欢迎大家一起讨论~
2024-10-01 15:45:53
1027
原创 C++----高精度计算
创建三个数组a1,b1,c并初始化,两个用来储存逆序后的数字(因为根据加法列竖式时是从个位开始相加),一个用来储存逆序后对应位数相加的数,并后续逆序输出。.判断是否有进位现象,以及是否有因最高位进位而导致数组长度发生变化,若存在,则数组长度+1。.首先创建两个字符串a,b分别储存要进行加法的两个数字,此时为正序排列。.将a1,b1相加并存入数组c中(此时仍为逆序).输入a,b并将其逆序存入数组a1,b1中。以下是两种不同的编码样例,但本质是一样的~
2024-09-30 17:29:52
537
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人