- 博客(55)
- 收藏
- 关注
原创 蓝桥杯填空题攻克
将余数从下往上排列结果为1101,因为取余顺序与结果相反,所以使用队列的先进先出,每次取余将结果压入队列。计算方式是把每一位上的数字乘以该位的权重,再将所有结果相加,最终得到对应的十进制数。所谓十进制整数拆解,就是将一个十进制整数x按照十进制拆解除每一位。假设前7个人,不互相握手,其他人互相握手。例如,将十进制数 13 转换为二进制数(
2025-04-09 15:17:07
285
原创 蓝桥杯练习题2(C/C++)
如果target已经存在于哈希表中,说明存在两个元素和之前遍历过的某个元素异或结果为x,返回true。3.循环处理pos中的下标,删除对应的字符,并更新左右邻指针,同时标记改字符已被删除。在删除过程中,记录新发现的可能需要删除的字符的左右邻字符下标,存储在临时向量p中。4.对临时向量p中的下标对应的字符进行检查,找出新的需要删除的字符,将其加入pos中。2.遍历字符串中的每个字符,找出满足删除条件的字符对,并将下标存入pos。1.利用异或运算的性质:a^b==x等价于a^x==b且b^x==a。
2025-02-28 13:51:49
830
20
原创 Linux基本指令
在技术领域,Linux 操作系统的身影随处可见,服务器、云计算都有它的存在。而要玩转 Linux,掌握基本指令是第一步。这些指令是我们和 Linux 交流的 “语言”,能帮我们管理文件、控制进程。
2025-02-07 23:41:47
1269
21
原创 C++/stack_queue
kw=stack1.队列是一种容器适配器,专门用于在FIFO上下文先进先出中操作,其中从容器一端插入元素,另一端提取元素。2.队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素。元素从队尾入队列,从队头出队列。3.底层容器可以是标准容器类模板之一,也可以是其他专门设计的容器类。该底层容器应至少支持以下操作empty:检测队列是否为空size:返回队列中有效元素的个数front:返回队头元素的引用back。
2025-01-27 22:50:21
1083
19
原创 双指针算法详解
【快慢指针】有⼀个特性,就是在⼀个圆圈中,快指针总是会追上慢指针的,也就是说他们总会相遇在⼀个位置上。其实不单单是环形链表或者是数组,如果我们要研究的问题出现循环往复的情况时,均可考虑使⽤快 慢指针的思想。如果改变右边界,⽆论右边界移动到哪⾥,新的⽔⾯的⾼度⼀定不会超过左边界,也就是不会。在⼀次循环中,每次让慢的指针向后移动⼀位,⽽快的指针往后移动两位,实现⼀快⼀慢。超过现在的⽔⾯⾼度,但是由于容器的宽度减⼩,因此容器的容积⼀定会变⼩的。常⻅的双指针有两种形式,⼀种是对撞指针,⼀种是左右指针。
2025-01-03 22:56:35
1293
31
原创 C++/vector
vector()无参构造vector构造并初始化n个val拷贝构造使用迭代器进行初始化构造vector构造:return 0;// const对象使用const迭代器进行遍历打印while (it!
2024-10-25 21:43:35
807
25
原创 C++/内存管理
new的原理1. 调用operator new函数申请空间2. 在申请的空间上执行构造函数,完成对象的构造delete的原理1. 在空间上执行析构函数,完成对象中资源的清理工作2. 调用operator delete函数释放对象的空间new T[N]的原理1. 调用operator new[]函数,在operator new[]中实际调用operator new函数完成N个对象空间的申请2. 在申请的空间上执行N次构造函数delete[]的原理。
2024-10-08 22:50:04
1041
38
原创 c++/string类
kw=string在使用string类时,必须包含#include头文件以及using namespace std;
2024-09-28 23:42:57
909
23
原创 C++:模板开端
class 类模板名// 类内成员定义// 类模板public:// 构造函数,初始化堆栈,默认为容量4_size = 0;// 入栈操作private:T* _array;// 存储栈元素的数组// 栈的容量// 栈中当前元素的数量// 模板函数的定义。模板函数的定义建议与声明在同一文件中,避免链接错误。// 将数据推入栈中++_size;// 更新栈的大小int main()// 创建一个存储整数的栈// 创建一个存储双精度浮点数的栈return 0;
2024-09-15 09:32:42
1514
55
原创 C语言实现经典排序算法
所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。:数据元素全部放在内存中的排序。:数据元素太多不能同时放在内存中,根据排序过程的要求不断地在内外存之间移动数据的排序。
2024-08-29 20:09:10
1224
30
原创 数据结构--二叉树
此处手动快速创建一颗简单的二叉树,快速理解二叉树注意:上述代码并不是创建二叉树的方式,真正创建二叉树方式后序详解重点讲解。再看二叉树基本操作前,再回顾下二叉树的概念,1.2.从概念中可以看出,二叉树定义是递归式的,因此后序基本操作中基本都是按照该概念实现的。
2024-08-05 21:35:26
390
29
原创 C++:类和对象
class为定义类的关键字,Date为类的名字,{}中为类的主体,注意类定义结束时后⾯分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的⽅法或者成员函数。为了区分成员变量,⼀般习惯上成员变量会加⼀个特殊标识,如成员变量前⾯或者后⾯加_ 或者 m开头,注意C++中这个并不是强制的,只是⼀些惯例,具体看公司的要求。
2024-07-19 00:31:59
854
2
原创 C++开篇
定义命名空间,需要使⽤到namespace关键字,后⾯跟命名空间的名字,然后接⼀对{}即可,{}中即为命名空间的成员。命名空间中可以定义变量/函数/类型等。namespace本质是定义出⼀个域,这个域跟全局域各⾃独⽴,不同的域可以定义同名变量,所以下⾯的rand不在冲突了。C++中域有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找⼀个变量/函数/类型出处(声明或定义)的逻辑,所有有了域隔离,名字冲突就解决了。
2024-07-12 01:50:40
1568
8
原创 数据结构--栈与队列
队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出 FIFO(First In First Out)队列也可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数组头上出数据,效率会比较低。栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。把队尾前面全部数据给到另一个队列,就能取到队尾相当于栈顶的数据。入队列:进行插入操作的一端称为队尾。出队列:进行删除操作的一端称为队头。:栈的删除操作叫做出栈。栈的实现一般可以使用。
2024-06-27 00:47:49
542
30
原创 链表经典面试题--链表修至圆满
追上了 错过了---->进行新得一轮追击,距离变成C-1(假设C是环得长度)两种情况:1.C-1是偶数 2.C-1是奇数。由此,N是1奇数时,C也是奇数;N是偶数是,C也是偶数。结论:如果同时存在N是奇数且C是偶数,那么就永远追不上。假设slow进环时,fast跟slow距离时N,假设slow进环时,fast跟slow距离时N,N是奇数第一轮追不上,C-1是偶数第二轮就追上了。2.N是奇数,第一轮追击会错过,距离变成C-1。所以,N是奇数且C是偶数不能同时存在,
2024-06-20 00:50:50
889
38
原创 经典链表算法题
那么将数列从头至尾、0~numsSize(让存在的数字能出现第二遍)取异或,最后的结果一定是缺失的数。首先我们得清楚异或(^)的原理:相同为0,相异为1,并且0^任何数都等它本身,即(假设ab不相等)a ^ a = 0,a ^ b = b ^ a,0 ^ a = a。2.找交点:让长的链表先走两链表的差距距离,再同时走,第一相等的就是交点。后两指针同时走, 快指针走完,此时慢指针位置就是倒数第k个节点。1.先判断是否相交:判断尾指针是否一致(需要使用地址判断)快指针先走k步,快指针和慢指针距离相差k。
2024-06-16 00:36:50
524
12
原创 时间/空间复杂度(C语言)
但是经过计算机行业的迅速发展,计算机的存储容量已经达到了很高的程度。,它定量描述了该算法的运行时间。一 个算法执行所耗费的时间,从理论上说,是不能算出来的,只有你把你的程序放在机器上跑起来,才能知道。3. 实例3递归调用了N次,开辟了N个栈帧,每个栈帧使用了常数个空间。使用大O的渐进表示法以后,Func1的时间复杂度为:O(N^2)的空间,因为这个也没太大意义,所以空间复杂度算的是变量的个数。1. 实例1使用了常数个额外空间,所以空间复杂度为 O(1)2. 实例2动态开辟了N个空间,空间复杂度为 O(N)
2024-06-13 22:52:29
1006
35
原创 数据结构--双向链表
2. 带头双向循环链表:结构最复杂,⼀般⽤在单独存储数据。实际中使⽤的链表数据结构,都是带头双向循环链表。另外这个结构虽然结构复杂,但是使⽤代码实现以后会发现结构会带来很多优势,实现反⽽简单了。实际中更多是作为其他数据结构的⼦结构,如哈希桶、图的邻接表等等。前面的单链表应该叫不带头单向不循环链表,前面的单链表章节提到的头节点只是为了方便理解,并不是真正的头节点。带头链表⾥的头节点,实际为“哨兵位”,哨兵位节点不存储任何有效元素,只是站在这⾥“放哨的”List.c//实现双向链表的方法。
2024-06-05 22:01:50
734
55
原创 数据结构--链表
想象⼀下这样的场景,假设每节⻋厢的⻋⻔都是锁上的状 态,需要不同的钥匙才能解锁,每次只能携带⼀把钥匙的情况下如何从⻋头⾛到⻋尾?链表的结构跟⽕⻋⻋厢相似,淡季时⻋次的⻋厢会相应减少,旺季时⻋次的⻋厢会额外增加⼏节。链表中每个节点都是独⽴申请的(即需要插⼊数据时才去申请⼀块节点的空间),我们需要通过指针变量来保存下⼀个节点位置才能从当前节点找到下⼀个节点。当我们想要从第⼀个节点⾛到最后⼀个节点时,只需要在前⼀个节点拿上下⼀个节点的地址(下⼀个节点的。最简单的做法:每节⻋厢⾥都放⼀把下⼀节⻋厢的钥匙。
2024-05-30 00:25:41
1557
18
原创 顺序表实现通讯录项目
实际上要进行的是顺序表的初始化,顺序表的初始化已经实现好了,所有直接调用顺序表中的SLlnit函数,便可以实现通讯录的初始化,定义ContactInit函数。要删除的数据必须存在,才能执行删除操作,所以在这之前要先实现一个查找函数FindByName。因为要用到SeqList.h中的顺序表,所以要改一下数据类型,改成创建好的通讯录类型。因为要用到顺序表相关的方法,对通讯录的操作实际就是对顺序表进行操作。这里首先接收用户要添加的数据,然后调用顺序表当中的头插或尾插。也是一样,可以直接调用顺序表实现好的方法。
2024-05-27 13:53:57
721
61
原创 我的创作纪念日
接触到编程没多久便开始了博客的创作,开始的初心便是能够记录我学习编程的过程及我进步的过程,如今也是的;但有时为了博客的持续输出有点注水,不那么注重博客质量,该反省,我会努力改正。我感觉创作博客已经成为我学习生活中的一部分,如果一个星期没写好两三篇就感觉很别扭。在创作当中,也让我重复的复习了一遍知识点,巩固了知识。希望以后越来越好,希望家人身体健康,SeqList(通讯录).h。学会了如何总结自己的代码。过去写得最好的一段代码?
2024-05-26 01:04:04
232
8
原创 C语言实现三子棋游戏
目录一.三子棋游戏分析和设计二.文件结构设计 三.代码实现1.先打印菜单,定义menu函数。2.棋盘初始化3.下棋玩家下棋:电脑下棋:4判断输赢判断平局:四、完整代码test.cgame.hgame.c那么应如何使用C语言实现呢?游戏界面:菜单: 设计成三个文件实现这个游戏。2.棋盘初始化创建二维数组board存放棋盘信息,定义qipan函数,初始化二维数组,使3*3的每个位置全部置为空打印棋盘,定义dayinqipan函数,使用 “-” 与“|”符号打印出棋盘电脑下棋:
2024-05-26 00:36:30
530
6
原创 数据结构--顺序表
但是在物理结构上并不⼀定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。线性表是⼀种在实际中⼴泛使⽤的数据结构,常⻅的线性表:顺序表、链表、栈、队列、字符串...存放指定位置,然后把pos之后的数据整体往后移动一位,在pos位置插入所需要的数据即可。因为数组并不是定长的,可根据实际数据大小进行动态申请空间,随着数据的增加,也可进行。顺序表的底层结构是数组,对数组的封装,实现了常⽤的增删改查等接⼝。与插入数据原理一样,只需在所需的位置删除数据即可。在数据的头部插入数据;在数据的尾部插入数据。
2024-05-25 16:37:15
884
3
原创 C语言-文件操作
1. 为什么使⽤⽂件?如果没有⽂件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运⾏程序,是看不到上次程序的数据的,如果要将数据进⾏持久化的保存,我们可以使⽤⽂件。2. 什么是⽂件?磁盘(硬盘)上的⽂件是⽂件。但是在程序设计中,我们⼀般的⽂件有两种:程序⽂件、数据⽂件(从⽂件功能的⻆度来分类的)。2.1 程序⽂件程序⽂件包括源程序⽂件(后缀为.c),⽬标⽂件(windows环境后缀为.obj),可执⾏程序(windows 环境后缀为.exe)。
2024-05-15 00:24:19
682
8
原创 C语言--动态内存管理
母亲节快乐,祝母亲长命百岁母亲节快乐,祝母亲长命百岁1. 为什么要有动态内存分配但是上述的开辟空间的⽅式有两个特点:空间开辟⼤⼩是固定的。数组在申明的时候,必须指定数组的⻓度,数组空间⼀旦确定了⼤⼩不能调整有时候我们需要的空间⼤⼩在程序运⾏的时候才能知道,那数组的编译时开辟空间的⽅式就不能满⾜了。C语⾔引⼊了动态内存开辟,让程序员⾃⼰可以申请和释放空间,就⽐较灵活2. malloc和free。
2024-05-12 00:28:48
1257
22
原创 数据库查询--条件查询
例如“匹配字符串”如果是w%这样的,那么它就可以匹配如“w”、“we”、“welcome”这样的等等。用判断某个字段的值是否在一个指定的集合中,如果字段在该集合中,则该字段所在的记录会被查询出来。如果字段的值(数值型)在指定范围内,则字段所在的记录将被查询出来;在上述语法格式中,匹配字符串指的是要用来匹配的字符串,通常里面还有某些通配符,如。查询student数据表的名字包含6个字符,并且以字母u结尾的学生的记录。的字符串,包括空字符串;查询student数据表中的名字里没有字母o的学生的记录。
2024-05-10 20:02:28
1741
4
原创 自定义类型:联合体和枚举
目录C语言自定义类型--联合体和枚举1.联合体1.1联合体类型的声明1.2.联合体的特点1.3相同成员的结构体和联合体对比1.4联合体⼤⼩的计算2.枚举2.1 枚举类型的声明2.2 枚举类型的优点2.3 枚举类型的使⽤。
2024-05-07 14:17:43
747
8
原创 自定义类型:结构体
位段的声明和结构是类似的,有两个不同:1. 位段的成员必须是 int、unsigned int 或signed int ,在C99中位段成员的类型也可以选择其他类型。2. 位段的成员名后边有⼀个冒号和⼀个数字。int _b:4;int _c:5;int _d:4;A就是⼀个位段类型。那位段A所占内存的⼤⼩是多少?4.2位段的内存分配1.位段的成员可以是或者是char等类型2.位段的空间上是按照需要以4个字节(int)或者1个字节(
2024-05-01 11:18:04
1107
10
原创 C语言--数据在内存中的存储
一、整数在内存的存储整数的2进制表示方法有三种,即原码、反码和补码有符号的整数,三种表示方法均有符号位和数值位两部分 ,符号位都是用0表示’正‘,用1表示’负‘,最高位的一位被当做符号位,剩余的都是数值位。。:直接将数值按照正负数的形式翻译成⼆进制得到的就是原码。:将原码的符号位不变,其他位依次按位取反就可以得到反码。:反码+1就得到补码。对于整形来说:数据存放内存中其实存放的是补码。为什么呢?在计算机系统中,数值⼀律⽤补码来表⽰和存储。原因在于,使⽤补码,可以将符号位和数值域统⼀处理;
2024-04-23 23:17:55
1149
16
原创 数据库查询--简单查询
在很多数据表中,有些字段的值会大量重复出现,如student表中的性别字段和汽车信息表中的汽车类型字段。为了使得查询输出结果更易读,同时保护数据表字段定义不被泄露,可以使用字段别名来优化查询结果输出。当MySQL执行查询时,查询结果可能数量众多,但实际可能只需要其中的部分行记录。在默认情况下,查询输出结果就是按照数据记录最初添加到数据表里的顺序来排序的。查询数据表student中的所有记录(包括全部字段)其中单表查询又分为 简单查询 与 条件查询。数据库查询分为:1.单表查询。1.查询所有字段数据。
2024-04-23 00:16:54
553
9
原创 C语言--内存函数
和memcpy的差别就是memmove函数处理的源内存块和⽬标内存块是。如果source和destination有任何的重叠,复制的结果都是。是⽤来设置内存的,将内存中的值以字节为单位设置成想要的内容。⽐较从ptr1和ptr2指针指向的位置开始,向后的。出现重叠,就得使⽤memmove函数处理。2. memmove 使⽤和模拟实现。1.memcmp使用和模拟实现。1.memcmp使用和模拟实现。3.memset函数的使用。4.memcmp函数的使用。而对于重叠的内存,交给。
2024-04-15 00:00:24
731
13
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人