自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 编译原理笔记

编译程序是一种翻译程序,将源语言翻译为目标语言。C语言代码——>汇编代码词法分析、语法分析、语义分析、中间代码生成(或优化)、目标代码生成(或优化)词法分析(Lexical Analysis)是编译原理(将高级编程语言转换为机器可执行代码的核心技术)中的第一个关键阶段,也叫 “扫描”(Scanning)。将原始的、无结构的源代码字符串,按照语言的语法规则,拆分成一个个具有独立语义的 “最小语法单元”—— 词法单元(Token),同时过滤掉无关信息(如空格、注释、换行符)。

2026-01-22 02:11:47 1059

原创 微型计算机接口与原理笔记

本课程面向理工类学生,是计算机及相关专业的一门专业基础课程。以最具有代表性的32位80X86微处理器为核心的微型计算机作为原型,系统讲述微型计算机的系统构成、工作原理和接口技术。本篇部分内容取自中国大学MOOC南京邮电大学要学好这门课程,在学习中要做到:1.理解相关概念和原理,切勿死记硬背。2.汇编程序设计要多动脑多动手上机编程。3.接口技术中的硬件结构和软件编程结合起来学习。

2025-10-22 23:09:37 1089

原创 [C++]异常

C++异常机制摘要: C++通过异常机制提供了比C语言更完善的错误处理方式。异常通过throw抛出,try-catch捕获,支持多类型匹配和重新抛出。异常会沿着调用栈向上传播直至匹配的catch块,过程中会创建异常对象的拷贝以保证安全性。自定义异常体系可通过继承std::exception实现多态捕获。标准库提供了一系列异常类如runtime_error、bad_alloc等。使用异常时需注意:构造函数/析构函数中慎用异常,推荐使用RAII管理资源,C++11新增noexcept声明不抛异常的函数。异常虽有

2025-09-17 16:15:31 644

原创 [C++]C++11(下)

左值是一个表示数据的表达式(如变量名或解引用的指针),我们可以获取它的地址,一般可以对它赋值,左值可以出现赋值符号的左边,也可以出现在赋值符号的右边,而右值不能出现在赋值符号左边,只能出现在赋值符号的右边。所以左边的一定是左值,右边的不一定是右值左值一般可以对它进行赋值,有几个例外就是定义时const修饰符后的左值,不能给他赋值,但是可以取它的地址。左值引用就是给左值的引用,给左值取别名。还有字符串常量、字符串上一个元素都是左值。int main()// 以下的p、b、c、*p都是左值。

2025-04-23 16:00:30 668

原创 [C++]C++11(上)

容器之间的主要设计区别在于,前者在内部仅保留指向下一个元素的链接,而后者为每个元素保留两个链接:一个指向下一个元素,一个指向前一个元素,允许在两个方向上进行高效迭代,但每个元素会消耗额外的存储空间,并且插入和删除元素的时间开销略高。forward_list类模板在设计时就考虑到了效率:根据设计,它与简单的手写 C 样式单链表一样高效,实际上,它是唯一一个出于效率考虑而故意缺少 size 成员函数的标准容器:由于它作为链表的性质,具有需要恒定时间的大小成员将要求它为其大小保留一个内部计数器(如。

2025-04-01 15:26:39 1097

原创 [C++][STL]unordered_set类和unordered_map类

在C++98中,STL提供了底层为红黑树结构的一系列关联式容器,在查询时效率可达到logN,即最差情况下需要比较红黑树的高度次,当树中的节点非常多时,查询效率也不理想。最好的查询是,进行很少的比较次数就能够将元素找到。在C++11中,STL又提供了4个unordered系列的关联式容器,这四个容器与红黑树结构的关联式容器使用方式基本类似,只是其底层结构不同。unordered_xxx系列与map和set容器的用法上几乎没有任何区别他们的区别就是。

2025-03-27 22:16:55 949

原创 [C++]哈希表

相比闭散列,开散列看似增加了存储指针的空间开销,实际上闭散列要保证大量的空闲单元以降低哈希冲突,所以开散列反而更加节省空间,其空间利用率更高!哈希表平均查找可达O(1),但最坏降到O(N)(哈希冲突)红黑树最坏查找也可保持O(logN),比较稳定数据有序性:哈希表无序,而红黑树有序适用场景:哈希表适合单点查找,红黑树适合范围查找。

2025-03-27 16:42:07 1080

原创 速通Python第六节——字典

字典也是一个常用的结构字典的所有操作都是围绕key来展开的需要表示键值对映射这种场景时就可以考虑使用字典。

2024-12-23 21:41:13 868

原创 速通python 第五节——列表和元组

编程中经常需要使用变量来保存表示数据如果代码中需要表示的数据个数比较少我们直接创建多个变量即可但是有的时候代码中需要表示的数据特别多甚至也不知道要表示多少个数据这个时候就需要用到列表.创建列表主要有两种方式[ ]表示一个空的列表如果需要往里面设置初始值可以直接写在[ ]当中可以直接使用 print 来打印 list 中的元素内容列表中存放的元素允许是不同的类型. (和C++ Java不同。

2024-12-22 22:02:32 924

原创 速通Python 第四节——函数

10.编程中的函数和数学中的函数有一定的相似之处. 数学上的函数, 比如 y = sin x , x 取不同的值, y 就会得到不同的结果. 编程中的函数, 是一段 可以被重复使用的代码片段求一段范围的数的和不使用函数可以发现这几组代码基本是相似的只有一点点差异可以把重复代码提取出来做成一个函数在实际开发中, 复制粘贴是一种不太好的策略. 实际开发的重复代码可能存在几十份甚至上百份.一旦这个重复代码需要被修改, 那就得改多次因此我们可以定义一个函数来解决这些问题因此上面的代码最终就是。

2024-12-22 21:37:03 1169

原创 速通Python 第三节

条件语句能够表达如果...否则..."这样的语义这构成了计算机中基础的。

2024-12-22 17:29:21 1232

原创 速通Python 第二节

在Python中一个变量是什么类型是可以在程序运行过程中发生变化的这个特性称为动态类型在程序执行过程中, a的类型刚开始是int,后面变成了str.C++/Java这样的语言则不允许这样的操作一个变量定义后类型就是固定的了这种特性则称为静态类型".动态类型特性是一把双刃剑对于中小型程序可以大大的解约代码量比如写一段代码就可以同时支持多种类型).对于大型程序则提高了模块之间的交互成本. (程序猿A提供的代码难以被B理解注释是一种特殊的代码。

2024-12-21 15:22:24 1021

原创 速通Python 第一节

a=10上述代码的意思就类似与把10这个数据存放在a这个空间中注意:=在Python中是"赋值运算符"不是数学上的等号变量名由数字字母下划线构成数字不能开头变量名不能和关键字重复变量名大小写不同. num和Num是两个不同的变量名2)变量的使用读取变量的值a = 10print(a)运行结果:注意:print运行结束会自带一个换行,至于怎么不换行后面解释修改变量的值a = 10print(a)a = 20print(a)p运行结果:当然。

2024-12-21 13:58:24 821

原创 [C++&数据结构]map与set的模拟实现

想要对于map和set进行模拟实现,我们首先就需要对于map和set的源码进行分析我们发现在set和map中包含有如下的头文件于是我们可以先打开这些头文件,我们先不考虑multimap与multiset我们可能会因为set只有存数据而会误以为他里面使用的是key模型的红黑树,但是其实不是的。在stl库里面map和set使用的是同一棵key-val的红黑树。如下所示,可以看出来​不过虽然使用的是key-val的红黑树,但是它的key和val都是key。

2024-11-27 18:08:55 1016

原创 全国高校计算机能力挑战赛区域赛2019C++选择题题解

记stack1的容量是O,stack2的容量是P,(O>P),将stack1作为存储空间,stack2作为输出的缓冲空间。如果出队列的顺序为c,f,e,g,d,b,a,则要求栈X的最小容量为()。B:有序顺序表顺序存储地址是连续的,有序的单链表地址随机的,只是数据元素是有序的,折半查找主要通过的是地址下标来查找的,因此有序单链表不能用折半查找来得到数据。38.若有定义int a[2][5],a[0][1]的地址是X,且一个整型数据占用两个字节的内存空间,则a[0][0]和a[1][3]的地址分别为()。

2024-11-16 20:32:49 1162

原创 [算法初阶]快速幂

我们先来看这道题这道题目乍一看会觉得并不难啊,题目短短一行而已,而且思路也很容易,求幂这种算法一般在初学程序设计语言的时候应该都有联系过,只要写一个简单的循环就能够搞定。(或者用pow函数)这里假设我们使用循环来写!i <= n;但是这样真的对吗?我们不妨来运行一下:奇了怪了?为什么会变成这样子呢?先不急,我们再来考虑一下,为什么这道题会让我们取模呢?仅仅只是增加难度嘛?实则不然,我们知道”指数爆炸。

2024-11-13 15:41:37 835

原创 [算法初阶]埃氏筛法与欧拉筛

首先我们明白:素数的定义是只能整除1和本身(1不是素数)。我们判断一个数n是不是素数时,可以采用试除法,即从i=2开始,一直让n去%i,直到i*i

2024-11-10 22:57:22 376

原创 [算法初阶]第二集 滑动窗口(已完结)

下面我们来看题目吧!

2024-11-01 13:41:53 879

原创 [C++进阶&数据结构]红黑树

红黑树有红色结点和黑色结点两种颜色。所以不妨我们使用一个枚举类型来进行表示。红黑树里面我们需要有一个pair类型来进行存储key和value类型的数据。然后我们定义三个指针,分别指向父亲,左孩子,右孩子。最后定义其的颜色。在构造函数中,我们将其的颜色默认设置为红色。设置为红色是比较有讲究的。那是因为我们大多数场景下都是去创建一个新节点去插入的。如果我们插入的这个新结点是黑色的话,那么造成的后果就是违反了规则4,即每条路径上的黑色结点个数相同,显然这种情况要进行补救的话是十分麻烦的。

2024-10-24 23:09:44 1108

原创 [C++进阶]第三十五节 AVL树

如下所示,我们将AVL结点的值定义为一个pair对象,目的是使用key-value模型。bf是一个平衡因子。这里我们还需要使用三叉链结构int _bf;

2024-09-17 17:17:36 1083 1

原创 [C++进阶&数据结构]第三十四节 map和set的相关题目

代码解析:6.单词识别代码解析:本篇类似番外,目的只是方便大家巩固,如有错误感谢指正

2024-08-30 23:54:50 1199

原创 [C++番外] 第三十三节 抛异常

异常总体而言,利大于弊,所以工程中我们还是鼓励使用异常的。

2024-08-27 22:54:01 1396

原创 [C++进阶]第三十二节 map和set

如下图所示:我们可以注意到它的模板参数是要比其他容器多一个的,这个容器我们也可以看到是一个仿函数。我们使用优先级队列的时候也用过这个仿函数。集合是按照特定顺序存储唯一元素的容器。在一个集合中,元素的值也标识它(值本身就是键,类型为 T),并且每个值必须是唯一的。集合中元素的值在容器中不能修改(元素总是 const 类型的),但是可以从容器中插入或删除元素。在内部,集合中的元素总是按照其内部比较对象(类型为 Compare )指示的特定严格弱排序标准排序。

2024-08-21 00:03:30 1342

原创 [C++进阶]第三十一节 二叉树进阶的一些面试题(二)

(中序和后序跟前序的思路完全一 致,只是前序先访问根还是后访问根的问题。后序稍微麻烦- -些,因为后序遍历的顺序是左子树右子树根,当取到左路结点的右子树时,需要想办法标记判断右子树是否访问过了,如果访问过了,就直接访问根,如果访问过需要先访问右子树。这里访问右子树要以循环从栈依次取出这些结点,循环子问题的思想访问左路结点的右子树。这题是上面那题的姊妹题,换换顺序就能写好了。但是这道题我们的目的是用迭代做出来。2.再访问左路结点的右子树。

2024-08-19 01:06:27 266

原创 [C++进阶]第三十节 二叉树进阶的一些面试题(一)

核心思想:我们在层序遍历过程中,增加一-个levelSize,记录每层的数据个数,树不为空的情况下,第1层levelSize=1,循环控制,第1层出完了,第2层就都进队列了,队列中size就是第2层的数据个数。这道题属于与基础题,首先我们观察输入输出样例可以得到如果root->left为空,root->right不为空时,我们的空格仍然需要保留,如果当前节点有两个孩子,那我们在递归时,需要在两个孩子的结果外都加上一层括号;上题我们搞完了,这题我们其实有个很简单的办法,我们把上题的代码赋值过来直接逆置即可。

2024-08-18 00:56:30 487

原创 [C++进阶]第二十九节 二叉搜索树的应用

前面我们讲过key模型和Key-Value模型就是常见的两种的模型。

2024-08-16 16:54:02 499

原创 [Linux]第七节 关于Linux版本,命令与权限的一些选择题

yum工具在每次安装指定软件包的时候,都会检测源服务器上的软件包信息,为了便捷不用每次都去搜索软件包信息,因此使用 yum makecache将软件包信息缓存到本地,使用 yum clean all 清理老旧的缓存信息。14.你使用命令”vi/etc/inittab”查看该文件的内容,你不小心改动了一些内容,为了防止系统出为,你不想保存所修改的内容,你应该如何操作。解析: 沾滞位的作用:在设置的沾滞位的目录下,其它用户可以创建文件,但是只能删除自己的文件,不。C 在末行模式下,键入:x!

2024-08-14 19:57:21 1028

原创 [算法初阶] 第一集 双指针

一、双指针概念相应大家的要求,所以我决定在开一个算法初阶的专栏,这样方便大家能够从我这的学习能够连贯。一、双指针概念常见的双指针有两种形式,⼀种是,⼀种是。:⼀般用于顺序结构中,也称左右指针。对撞指针从两端向中间移动。⼀个指针从最左端开始,另⼀个从最右端开始,然后逐渐往中间逼近。对撞指针的终止条件⼀般是两个指针相遇或者错开(也可能在循环内部找到结果直接跳出循环),也就是:left == right (两个指针指向同⼀个位置)left > right (两个指针错开)

2024-08-11 14:31:23 1058

原创 [算法2] 第三集 剪枝

在搜索算法中优化中,剪枝,就是通过某种判断,避免一些不必要的遍历过程,形象的说,就是剪去了搜索树中的某些“枝条”,故称剪枝。应用剪枝优化的核心问题是设计剪枝判断方法,即确定哪些枝条应当舍弃,哪些枝条应当保留的方法。

2024-08-11 01:07:31 1289

原创 [算法2] 第二集 二叉树中的深度搜索

一、(DFS,全称为 Depth First Traversal),是我们树或者图这样的数据结构中常⽤的⼀种遍历算法。这个算法会尽可能深的搜索树或者图的分支,直到⼀条路径上的所有节点都被遍历完毕,然后再回溯到上⼀层,继续找⼀条路遍历。在⼆叉树中,常见的深度优先遍历为:前序遍历、中序遍历以及后序遍历。因为树的定义本⾝就是递归定义,因此采⽤递归的方法去实现树的三种遍历不仅容易理解⽽且代码很简洁。

2024-08-09 20:36:57 1304

原创 [算法2]第一集 递归

我们再C语言和数据结构里都用了不少递归,这里就不多详细介绍。递归简单来说就是函数自己调用自己的情况二、为什么要用递归呢?本质来说其实就是我们在解决一个问题后出现相同的问题,解决这个问题后会再出现相同的问题。我们解决这些问题的方式一样,所以就出现了函数自己调用自己。

2024-08-07 22:44:41 1186

原创 [C++进阶&数据结构]第二十八节 二叉搜索树

对于二叉树的结点,我们类似于list的结点定义一样,使用一个struct类。

2024-08-07 10:53:46 1541

原创 [C++进阶]第二十七节 继承和多态的选择题

子类定义的虚函数的新的行为会操作a变量,在子类初始化时根据构造函数调用顺序会首先调用父类构造函数,那么虚函数回去操作a,而因为a是子类成员变量,这时a尚未初始化,这是一种危险的行为,作为一种明智的选择应该禁止这种行为。C. 选择题一定要扣字眼,题目前半句说的是基类引用 引用了子类对象,但是后半句调用虚函数时,说的是基类的对象调用f2,通过对象调用时编译期间就直接确定调用那个函数了,不会通过虚表以多态方式调用。C.A::f(),因为强制类型转化后,生成一个基类的临时对象,pa实际指向的是一个基类的临时对象。

2024-07-31 01:31:09 1084

原创 [C++进阶]第二十六节 抽象类

在虚函数的后面写上 =0 ,则这个函数为纯虚函数。包含纯虚函数的类叫做抽象类(也叫接口类),抽象类不能实例化出对象。派生类继承后也不能实例化出对象,只有重写纯虚函数,派生类才能实例化出对象。纯虚函数规范了派生类必须重写,另外纯虚函数更体现出了接口继承。至于为什么起这个抽象的名字,我们可以理解为,这个类在现实世界中没有实体。所以不能实例化出对象。而且由于派生类继承了抽象类,它里面也包含了纯虚函数,那么它自然也不能实例化出对象了。

2024-07-29 08:42:26 480

原创 [C++进阶]第二十五节 对于多态的底层逻辑

在前面我们也已经提到过,在语法层面称之为重写,重写的是它的实现。所以有时候我们也会提出一个概念,普通的函数的继承称为实现继承,而多态,虚函数的重写,其实就是一个接口继承,然后重写它的实现在原理上就是说将父类的虚函数表给拷贝下来,然后将子类中重写的部分给覆盖。其次,因为只有完成了虚函数的重写,那派生类的虚表里面才能是派生类的虚函数。这样的话,这个基类指针才能做到指向父类调用父类,指向子类调用子类。

2024-07-29 00:00:14 1247

原创 [C++进阶]第二十四节 多态的概念、定义与实现

多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了Person。Person对象买票全价,Student对象买票半价。那么在继承中要构成多态还有两个条件:必须通过基类的指针或者引用调用虚函数被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写。多态的实现有两个条件必须通过基类的指针或者引用调用虚函数被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写(也就是要调用重写的虚函数)​​​​​​​。

2024-07-26 01:11:34 1115

原创 [C++进阶]第二十三节 多继承和菱形继承

很多人说C++语法复杂,其实多继承就是一个体现。有了多继承,就存在菱形继承,有了菱形继承就有菱形虚拟继承,底层实现就很复杂。所以一般不建议设计出多继承,一定不要设计出菱形继承。否则在复杂度及性能上都有问题。多继承可以认为是C++的缺陷之一,很多后来的OO(OO是面向对象,OOP是面向对象程序设计)语言都没有多继承,如Java。

2024-07-23 00:25:45 955

原创 [C++进阶]第二十二节 继承

Person类称为基类(父类),Student类称为派生类(子类)继承方式为public(公有)继承。

2024-07-22 17:03:05 771

原创 Leetcode215. 数组中的第K个最大元素

遍历数组将元素入堆;如果当前堆内元素超过 k 了,我们就把堆顶元素去除,即去除当前的最小值。因此我们在元素入堆的过程中,不断淘汰最小值,最终留在堆中就是数组中前 k 个最大元素,并且堆顶元素为前 k 大元素中的最小值,即为第 k 个元素。我们也可以使用堆排序来解决这个问题——建立一个小根堆,

2024-07-21 23:31:38 365

原创 [C++进阶]第二十一节 模板进阶

class 类模板名 {};T* _finish;

2024-07-21 23:04:39 1288 2

空空如也

空空如也

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

TA关注的人

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