自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 数据结构刷题

空间复杂度:临时开辟的空间、空间是可以重复利用的时间复杂度:程序执行次数。

2023-11-16 19:27:58 362 1

原创 队列Queue

两个指针分别记录头和尾之所以不用循环链表是添加删除元素都在链表头部进行,不涉及尾部增删操作。

2023-11-12 10:44:24 90

原创 数据结构——栈

栈是一种特殊的,在固定的一端进行,这端也成为,而不能进行插入删除的一端叫做。

2023-11-09 18:56:40 223

原创 程序的编译和链接

_FILE__ //进行编译的源文件__LINE__ //文件当前的行号__DATE__ //文件被编译的日期__TIME__ //文件被编译的时间__STDC__ //如果编译器遵循ANSI C,其值为1,否则未定义vs不完全支持c标准,Linux下的gcc支持c标准。执行环境1.程序必须载入内存中。在有操作系统的环境中:一般这个由操作系统完成。在独立的环境中,程序的载入必须由手工安排,也可能是通过可执行代码置入只读内存来完成。2.程序的执行便开始。接着便调用main函数。

2023-10-25 21:18:13 460 1

原创 C语言【文件】

所谓文件缓冲区,就是在使用文件时,系统会为每个文件分配一块缓冲区用于存放数据,当内存向磁盘中传输数据或当磁盘向内存中传输数据的时候,这些数据会一个一个被加载到缓存区上,再一齐被加载到内存或磁盘上。有时后我们会将文件输出到磁盘上,在需要的时候再从磁盘上把数据读取到内存中使用。对于整数10000,以ASCII码存储为5个字节,而二进制存储只占4和字节。每个被使用的文件都在内存中开辟了一个相应的。中以二进制的形式存储,如果不加转换的输出到。函数的返回值直接用来判断文件的是否结束。

2023-10-22 19:34:16 300 1

原创 c刷题[6]

我们可以一个数据一个数据地读入并执行相关操作,直到输入个数为要求的个数时再进行结果输出,缺陷就是必须输入完一组数据得。有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。规律:每行第一个元素和最后一个元素为1(主对角),从第三行开始,中间元素等于左上方元素和正上方元素相加。如果我们想一次性返回多个值,不如传递实参的地址过去,通过返回型参数实现多个值的返回。写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。方法一:使用pow函数。

2023-10-17 19:44:38 184

原创 动态内存管理

成员可以设置成。

2023-10-16 19:54:17 99 1

原创 自定义类型

(16位机器最大16,32位机器最大32,写成27,在16位机 器会出问题。前面我们讲了结构体的基本知识,还有一些知识并没有罗列完全,这篇将结构体剩余的一些小知识铺垫出来。可以看到,即使内部有相同类型也无法被编译器识别,且脱离结构体定义匿名结构体也是非法的。正确做法是用一个指针去接收结构体的地址,这种结构就是我们数据结构中链表的结构。嵌套的结构体应对齐到自身最大对齐数的整数倍处,该结构体的最大对齐数也就是作为。注意匿名结构体的生命周期只有声明这一行,且不同匿名结构体的类型都是不同的。

2023-10-12 21:40:43 149 2

原创 字符串和内存函数

第一个参数首次传递不为空,通过strtok函数找到指定分隔符位置后,将其替换成\0并记录下它的。加入循环条件,如果需要拷贝的源头字符串超过了自身长度可以考虑给多余的地方拷贝\0。功能:当函数调用失败时,将错误码(errno)转换成对应的错误信息或指向对应的地址。但这样做有个漏洞,一次性比较多个字符串势必有越界的情况,我们以。比较n个子串的大小,大于返回正数,小于返回负数,等于返回0。负责比较字符串,用一个指针去遍历目标数组,注意结束条件为。法二:四指针遍历法。功能:在一个字符串后面追加另一个字符串。

2023-10-06 18:50:12 120 3

原创 指针笔试题

的空间,所以会崩溃。

2023-10-03 15:18:43 142 3

原创 c刷题【五】

逻辑推断题,可以利用穷举法, 比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。说对一半可以译为1+0 == 1,每位可以译为&&。对于乘号前面的数,可通过/10,/100...获取,乘号后面的数通过%10,%100...获取,结束条件是不超过当前位数。可以看到在输出结果时我添加了判断条件,是因为结果有多个名次重名了,因为遍历时并没有考虑名次占用问题,所以我们根据每个排名的。1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以多少汽水(编程实现)。已知3个人说了真话,1个人说的是假话。

2023-09-24 17:22:40 75 1

原创 c指针进阶

作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。对于int*类型的数据,我们可以通过它的偏移量遍数据,而void*类型的数据无法获取具体偏移量,我们又想到,数据在内存中存放的单位是字节,我们可以通过。当函数返回值>0时,表示p1大于p2,当函数返回值

2023-09-21 19:44:20 76

原创 数据在内存中的存储

其实可以理解为我们站队时按从低到高还是从高到低排序,每个内存单元以字节为单位,超过一个字节就会出现如何安排字节的问题,所以就有了大小端。第二种情况我们通过分析,全为0时E = -127, 已经是一个极其小的数,还原时不再加上第一位的1,而是还原成0.xxxx的小数(这意味着,如果E为8位,它的取值范围为0~255;大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,保存在内存的高地址中。

2023-09-14 21:29:11 112 1

原创 c刷题(四)

这道题可以用switch case语句解,不过这道题更简单的方法是,关键点在于判断是否为。判断闰年和2月可以合并成一条语句用&&操作符连结,将数组下标0设置成0与月份对应,也可以添加断言是程序更加健壮。

2023-09-13 20:55:18 514 3

原创 c语言——结构体

/结构体声明struct Stu//名字int age;//年龄//性别int hight;//身高}s1,s2;//声明类型的同时定义变量s1,s2结构体的定义分为全局和局部两种形式,需要注意在声明结构体的时候定义的变量也是全局变量。//全局int main()//局部return 0;初始化就是定义变量的时候赋初值,类似数组,结构体可以用{}的方式赋初值。注意赋值顺序要与声明的结构体内部保持一致。顺序初始化。

2023-09-08 20:08:55 216

原创 c语言初阶指针

比较大小,不允许与。

2023-09-07 20:39:44 413 2

原创 c刷题(三)

line4:(,从左向右计算,结果为最后一个表达式)c=8,a=8,b=6(line5:a=8,c=8,+=优先级最低,先计算 a++ +c = 16,

2023-08-29 13:12:26 157 1

原创 c语言操作符

由于0和任何数异或都为这个数本身(相异),而自己异或自己为0(相同),这使得我们交换数字是存在一种有趣的加密解密效应,但无疑使得代码可读性大大降低,所以一般不推荐这样交换数字。巧记:可以联想哲学道理:世界上没有两片相同的树叶,相同是悖论为0,相异为真理为1。像这样不知道哪一步该执行,不同编译器的处理也是不同的,所以我们书写代码的时候尽量。左移本身并没有改变a的值。按位与在遇到1结果为1,遇到0时结果为0,这样能区分0和1,异或也是同理。巧记:可以理解成||操作符,0||1为1 0||0为0。

2023-08-13 19:09:36 195 3

原创 c刷题(二)

如果在一些刷题网站上,我们可以直接使用变长数组初始化数组,如果不使用变长数组,可以直接设置数组大小为题目规定的最大长度即可。了,当左边的数变为右边时,先不急着将左边的数换到右边,而是在右边位置补上一个\0,然后指针+1,形成递归,这样交换的时候就。一般情况我们可以写个循环然后在用条件判断语句对两种情况进行判断,但这里有个更优质的办法,,长度就是4,递归一次后变为2,此后不满足递归条件,所以正确判断条件应该是。矩阵打印用二维矩阵,在里层输入矩阵的值,判断大于0的数进行累加。上图是递归的具体过程,从图可知,

2023-08-11 16:35:09 336 1

原创 c基础扫雷

和三子棋一样,主函数先设计游戏菜单界面,这里就不做展示了。

2023-08-10 16:13:57 3188 4

原创 c语言——三子棋

三个文件:其中.cpp文件用于游戏具体函数设计,.h文件为游戏的函数声明,test.cpp文件用于测试游戏运行。

2023-08-08 18:22:31 1884 1

原创 c语言——数组

可以发现,原来一行访问4个的数组现在一行访问五个,结合刚才图示的物理结构,二维数组也是连续存放的,所以会直接跳到下一行元素,导致一系列。的,而通过指针接收可以访问任意下标的成员,对比传整个数组,大大减少了空间的消耗。思路:N个数N趟,每一趟选出最大/最小的数放到最右边,直到完成升序/降序排序。一个长度为n的数组,如果它的下标等于或大于n,就称作数组越界。变长数组不能被初始化。需要注意的是,数组越界并不是总能被编译器检查出来的。是整个数组的地址(&arr[0]是首元素地址)注意区分\0,0,数字0和字符0,

2023-08-04 17:28:31 440 1

原创 c语言(函数)

实际很多情况我们不能靠库函数解决,所以就诞生了自定义函数,我们可以自己实现内部细节和功能。int z = 0;z = x;x = y;y = z;运行结果:为什么没有实现交换功能呢?我们可以看到它们的地址都不一样,所以没能实现交换,我们称传递的参数为实参,接收的参数为形参形参是实参的拷贝形参的建立与销毁只在调用函数的过程发生。所以它的交换只在函数体内。int z = 0;z = *x;*x = *y;*y = z;int b = 0;

2023-08-02 17:42:05 458 2

原创 c刷题(一)

25%12 = 1,12%1 = 0,1就是最大公约数。我们找到两个数中较小的那个,用它依次递减,如果能被这两个数整除,那它就是最大公约数。如果有一个数能被整除,那它就不是质数,反之是质数。这个没什么好说的,假定一个变量max遍历数组,选出最大值即可。要求:第一行输入printf的输出值,第二行输出printf的返回值。12%24 = 12,24%12 = 0,方法仍成立。大家想想是不是这样的道理,这样做可以减少遍历的次数。需要注意的是,这种办法改变了原变量的值。如果将这个数开平方,如果它不是素数,则在。

2023-07-30 20:33:42 525

原创 [C初阶]循环和分支语句

我们结合本篇学的知识,用猜数字游戏做一个复习。domenu();break;case 0:printf("退出游戏\n");break;default:printf("选择错误,重新选择!\n");break;while (n);return 0;接下来我们完善game函数要想实现猜数字这个功能,我们得需要电脑生成随机数,而rand是专门用来生成随机数的函数。

2023-07-22 20:19:35 141

原创 链表刷题(9-12)

当我们不知道哪个链表长的时候可以先假设其中一个链表大,另一个小,然后判断它们的长度做出假设失败的修改。假设fast走三步,slow只走一步,假设进环后它们的距离是N,那么它的追击可能会出现两种情况。当它们的距离为-1,即fast反超slow一步时,此时的距离为M-1(M为环的节点个数)若M-1为偶数,则可以追上,若M为奇数,则永远追不上。,解出L的值,然后根据图示它们一起行动就会在起点相遇。N为奇数:N,N-2,N-4 .... 3,1,-1。N为偶数:N,N-2,N-4 .... 4,2,0。

2023-06-28 21:46:53 136 3

原创 [数据结构初阶]双链表

LTNode;

2023-06-24 16:07:38 824 8

原创 链表刷题(4~8)

单链表刷题时我们遇到过一个反转链表,那时我们采用的是头插的方式达到反转的效果,那能不能把指针反过来呢?这里不支持用C实现,我们就先用C++实现。恰好我们实现了查找中间节点和反转链表,所以这里我们可以直接拷贝一份代码。这个题目算是比较难的题,它要求分割后的相对顺序不能改变。这道题与前一道题类似,不同的是不知道k为多长,为此,我们可以设置。一个记录比x小的数据,一个记录相等和比它大的数据,依次进行。这里用三个指针是为了记录后面节点的数据,不然就导致。新的链表我们都创建一个。这个图我画的比较乱,但思路却很明确。

2023-06-22 18:06:46 247 1

原创 单链表刷题(1-3)

解决了这个问题后更换力扣上的测试用例再调试,发现还有错:这次的数组是。

2023-06-16 18:46:38 290 4

原创 [数据结构初阶]单链表

SLTNode;需要注意,在结构体定义时定义的typedef需要在出了结构体才生效,不能直接在结构体内使用。在定义一个单链表节点时,我们只能在堆上申请空间,因为局部的声明周期在出了作用域后消失,而全局是静态区里的,做不到动态的增删查改数据,所以在堆区使得管理更加灵活高效。

2023-06-12 12:30:33 948 3

原创 顺序表刷题(1~3)

一个指针遇到删除的数据时往后走,直到出现不需要删除的数据,然后给另一个指针赋值,完成这部操作后两者同时移动。这道题一般可以对两个数组下标进行遍历比较,取小的一个进行尾插到nums1中,但在这里有一个测试用例可能会出错。以上题目其实还有多总解法,我们通过对这几道题的解答,能够对顺序表和数组有更深的理解就足够了。如果碰到后面的不是有效数据的0就会被覆盖,不满足非递减的要求。因为不需要考虑超出新长度后面的数组,所以我们只需返回它的。,所以不用担心后面会重复出现之前比较过的数据。,如果两者不同,则需先将。

2023-06-09 21:05:43 397 5

原创 [数据结构初阶]顺序表

定义结构体:通常情况下我们需要存储的数据是未知的,所以我们一般使用动态顺序表而非静态顺序表。初始化注意这里要用指针或引用的方式传递形参才能改变原对象的值。 (实参是形参的拷贝)在出了作用域后我们就得进行销毁操作,以免发生内存泄露尾插 尾插实现很简单,需要注意扩容这里可以用2倍扩容,因为频繁扩容是有消耗的。在我们使用realloc进行扩容时,如果指针为空,其作用相当于malloc底下一段话:如果扩容失败,则会返回一个空指针 尾删这里我只对size进行--,可以看到

2023-06-09 11:14:04 487

原创 String模拟实现(二)

resize的特点是,如果所给的长度小于空间大小就会删除多余的数据。前面我们实现了reserve,但有这样一个问题,如果reserve的长度小于空间就会导致缩容,而我们知道,string中缩容用的是,而。可以看到出现了容量小于size的情况,这样在拷贝的时候就会越界并在析构时出错,我们加上判断就可以了。对比reserve,它们的共同点都是不对capacity产生影响,这种以我们实现前先看段代码:这段代码说明了什么问题呢?答。

2023-06-07 10:52:51 629

原创 STL——string模拟实现(一)

的数据时,它所调用的。

2023-06-03 10:45:36 268 1

原创 string刷题(1~4)

因为字符串末尾不以空格结尾, 我们可以用rfind来查找最后一个空格,利用rfind找不到返回npos作为判断条件string s;cin >> s;if(pos!else注意这里输出单词要去掉空格,也就是-1。记住,两个下标相减,得到的长度是一个左闭右开的区间。但这段代码是有问题的,我们都知道scanf遇到空格或\n会停止,cin也是如此,为了避免这一问题,我们可以使用c++的getline函数,这样就可以将string以整行的方式输出了。第一个可以自定义结束标志,换行为通用结束标志。

2023-05-29 20:27:30 69 4

原创 STL——string(二)

前面我们简单介绍了string的一些常用成员函数,今天我们接着选择性地讲解string类,不常用的不代表没用,我们得知道,常用的是必须掌握的。 除了用size()遍历数组,这里我简单介绍一下用迭代器访问数组每个元素的操作,也为我们后面的学习做铺垫。iterator作为一个独立的类型,需要指定string::才能被解析成string内部的迭代器。这里的begin和end我们先肤浅地理解为指针,大概像下图这个样子。 除了用这种方式,我们还可以用范围for,底层还是迭代器。反向遍历通过反向迭代器的方式实现

2023-05-28 18:21:09 143 4

原创 STL——string(一)

需要注意的是,如果resize的大小n小于原来的大小,将会只保留前n位,所以我们看到就算给st1传递了字符a但却没有任何意义。注意s5和s6调用的是不同构造函数,s5是我们刚才介绍的第3个构造函数,不推荐像这样写,最好按照标准来写,以免发生混淆。这里有一张c++98的string类的构造函数表,对于string和后续STL的学习,我的讲解方式是。没错,它们就是一样的,感兴趣的可以了解一下这方面的演变过程,日常用size即可。,它会重新分配一块更小的内存,再将内容复制到新的空间,并释放原来的空间。

2023-05-25 18:02:11 74 5

原创 泛型编程——模板入门

注意类模板的声明和定义分离有点不一样,它们只能放在同一个文件里,否则会发生链接错误。~Vector();//声明template //定义这里要注意定义要在第一行跟上模板的定义且Vector后要加上构成完整类型,一般不推荐将声明和定义分离。这就是模板初阶的基本内容了,之后我们还会谈进阶模板,不要忘了一键三连啊!

2023-05-21 16:15:43 85 6

原创 C++内存管理

的作用。

2023-05-20 21:10:46 78 5

原创 C++类和对象(下篇)

我们说过,自定义类型初始化会调用自身的默认构造(无参,全缺省,编译器默认生成),那如果我不是默认构造怎么办呢?不能在声明的时候传递参数吧 ,那是定义的法子,所以这时初始化列表就尤为重要。声明类B可以看到成功调用了B的构造函数,接下来去掉缺省我们就利用起来我们的初始化列表,既然你不让我在声明的时候定义,我就在定义的地方定义成功运行接下来看一段稍微有点绕的代码,看完后希望能对其有个深刻的认识class Bpublic::_a(2)_a = num;

2023-05-18 21:30:05 92 5

空空如也

空空如也

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

TA关注的人

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