- 博客(80)
- 收藏
- 关注
原创 数据结构进阶:2_图
本文介绍了图的基本概念和存储结构。图由顶点集合V和边集合E组成,分为有向图和无向图。完全图是顶点间都直接相连的最稠密图。图的存储方式包括邻接矩阵(二维数组表示顶点关系)和邻接表。邻接矩阵适合稠密图,能快速判断顶点连通性;邻接表适合稀疏图,节省空间。文章还讨论了顶点度、路径、连通图等概念,并给出了C++实现图的邻接矩阵存储代码示例,包括添加边、查找顶点等操作。
2025-05-25 19:17:31
958
原创 MySQL:12_视图
本文介绍了MySQL视图的基本概念和使用方法。视图是基于查询定义的虚拟表,其数据来源于基表,视图与基表数据相互影响。主要内容包括:视图的创建、修改和删除语法;使用规则和限制,建议以查询为主;视图检查选项(CASCADED和LOCAL)的区别;视图更新的限制条件;以及视图的三大作用:简化操作、提高安全性和保证数据独立性。文章还通过案例演示了视图与基表的交互影响,并提供了OJ练习题链接。
2025-05-25 12:56:34
340
原创 MySQL:11_事务
本文介绍了MySQL事务的基本概念及其重要性。事务是一组逻辑相关的DML语句集合,具有原子性(要么全部成功要么全部失败)、一致性(维护数据完整性)、隔离性(防止并发问题)和持久性(永久修改)四大特性(ACID)。事务主要用于处理复杂操作,保证数据一致性。文章通过银行账户表案例演示了事务的基本操作(开始、保存点、回滚等),并验证了未提交事务在客户端崩溃时会自动回滚的特性。此外还说明了InnoDB引擎支持事务而MyISAM不支持,以及如何查看和设置事务提交方式(自动/手动)。
2025-05-25 12:47:35
1228
原创 C++进阶:5_哈希
unordered_map在线文档说明unordered_map是存储<key, value>键值对的关联式容器,其允许通过keys快速的索引到与其对应的value。在unordered_map中,键值通常用于惟一地标识元素,而映射值是一个对象,其内容与此键关联。键和映射值的类型可能不同。在内部,unordered_map没有对<kye, value>按照任何特定的顺序排序, 为了能在常数范围内找到key所对应的value,unordered_map将相同哈希值的键值对放在相同的桶中。
2025-05-08 20:34:29
803
原创 数据结构进阶:1_并查集
在一些应用问题中,需要将n个不同的元素划分成一些不相交的集合。开始时,每个元素自成一个单元素集合,然后按一定的规律将归于同一组元素的集合合并。在此过程中要反复用到查询某一个元素归属于那个集合的运算。适合于描述这类问题的抽象数据类型称为并查集(union-find set)。比如:某公司今年校招全国总共招生10人,西安招4人,成都招3人,武汉招3人,10个人来自不同的学校,起先互不相识,每个学生都是一个独立的小团体,现给这些学生进行编号:{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
2025-05-06 21:19:38
444
原创 C++进阶:4_map和set
(1).暴力查找(2).排序+二分查找 -> 底层是数组,插入和删除代价大O(N)(3).搜索树 -> 二叉搜索树(O(N)->平衡树(AVL树、红黑树)[内存]0(logN)->多叉平衡树(B树系列)[硬盘]内存磁盘(4).哈希(5).后续还有以表和字典树在初阶阶段,我们已经接触过STL中的部分容器,比如:vector、list、deque、forward_list(C++11)等,这些容器统称为序列式容器,因为其底层为线性序列的数据结构,里面存储的是元素本身。那什么是关联式容器?它与序列式容器有
2025-05-04 22:07:46
838
原创 MySQL:10_索引(重点)
可是,貌似这样也有效率问题,在Page之间,也是需要 MySQL 遍历的,遍历意味着依旧需要进行大量的IO,将下一个Page加载到内存,进行线性检测。磁盘是计算机中的一个机械设备,相比于计算机其他电子元件,磁盘效率是比较低的,在加上IO本身的特征,可以知道,如何提交效率,是。在单表数据不断被插入的情况下, MySQL 会在容量不足的时候,自动开辟新的Page来保存新的数据,然后通过指针的方式,将所有的Page组织起来。我们发现,现在查找的Page数一定减少了,也就意味着IO次数减少了,那么效率也就提高了。
2025-04-21 21:57:06
795
原创 Java:8_继承和多态
Java中使用类对现实世界中实体来进行描述,类经过实例化之后的产物对象,则可以用来表示现实中的实体,但是现实世界错综复杂,事物之间可能会存在一些关联,那在设计程序是就需要考虑。比如:狗和猫,它们都是一个动物。通过观察上述代码会发现,猫和狗的类中存在大量重复,如下所示:那能否将这些共性抽取呢?
2025-04-01 13:23:18
1124
原创 MySQL :7_函数
等价于插入current_date(),current_time(),current_timestamp()都可以,有点像隐式类型转换;但不要这么做插入非current_time()的时候前面加date()自己转换一下。
2025-03-30 18:55:58
578
原创 MySQL:6_表的增删改查
CRUD : Create(创建), Retrieve(读取),Update(更新),Delete(删除)语法:[ ]内部的内容都是选填案例:1. 单行数据 + 全列插入2. 多行数据 + 指定列插入全列插入也可以一次性插入多行数据3. 插入否则更新由于 主键 或者 唯一键 对应的值已经存在而导致插入失败可以选择性的进行同步更新操作 语法:4. 替换当我们插入的列和已有信息发生了冲突,把老数据删掉,重新插入新数据。如果没有冲突,直接插入。注意:删除后再插入会导致自增类型值发
2025-03-25 10:55:32
964
原创 Java:7_类和对象
面相对象程序设计关注的是对象,而对象是现实生活中的实体,比如:洗衣机。但是洗衣机计算机并不认识,需要开发人员告诉给计算机什么是洗衣机。上图左侧就是对洗衣机简单的描述,该过程称为对洗衣机对象(实体)进行抽象(对一个复杂事物的重新认知),但是这些简化的抽象结果计算机也不能识别,开发人员可以采用某种面相对象的编程语言来进行描述,比如:Java语言。**在java中定义类时需要用到class关键字,**具体语法如下// 创建类field;// 字段(属性) 或者 成员变量method;
2025-03-04 06:40:53
1023
原创 Linux:1_Linux下基本指令(下)
(罗列当前路径下的文件名)语法: 功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。常用选项:(当前在Linux系统中所处的路径(process walk director))语法: 功能:显示用户当前所在的目录常用选项:(进入指定的“文件夹”)Linux系统中,磁盘上的文件和目录被组成一棵目录树,每个节点都是目录或文件。Linux的整个文件目录结构是一颗多叉树04. touch指令(在当前目录下,创建一个新的普通文件)语法:功能:touch命令参数可更改文档或
2025-02-25 11:13:52
833
原创 MySQL:5_表的约束
真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的,从业务逻辑角度保证数据的正确性。比如有一个字段是email,要求是唯一的。表的约束很多,这里主要介绍如下几个:。
2025-02-25 09:31:34
696
原创 MySQL:4_数据类型
注意:尽量不使用unsigned,对于int类型可能存放不下的数据,int unsigned同样可能存放不下,与其如此,还不如设计时,将int类型提升为bigint类型。
2025-02-23 17:50:30
694
原创 MySQL:3_表的操作
在项目实际开发中,经常修改某个表的结构,比如字段名字,字段大小,字段类型,表的字符集类型,表的存储引擎等等。我们还有需求,添加字段,删除字段等等。这时我们就需要修改表。注意:删除字段一定要小心,删除字段及其对应的列数据都没了。不同的存储引擎,创建表的文件不一样。在users表添加二条记录。
2025-02-20 20:44:45
529
原创 MySQL:2_库的操作
mysqldump -P3306 -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径(数据库备份存储的文件是.sql文件)示例:将mytest库备份到文件(退出连接)这时,可以打开看看mytest.sql 文件里的内容,其实把我们整个创建数据库,建表,导入数据的语句都装载这个文件中。
2025-02-20 16:59:41
803
原创 MySQL:1_数据库基础(重点)
存储数据用文件就可以了,为什么还要弄个数据库?文件的安全性问题文件不利于数据查询和管理文件不利于存储海量数据文件在程序中控制不方便磁盘内存为了解决上述问题,专家们设计出更加利于管理数据的东西——数据库,它能更有效的管理数据。数据库的水平是衡量一个程序员水平的重要指标。
2025-02-18 21:24:33
1006
原创 Java:6_数组的定义与使用
数组:可以看成是相同类型元素的一个集合。在内存中是一段连续的空间。比如现实中的车库:数组中存放的元素其类型相同数组的空间是连在一起的每个空间有自己的编号,其实位置的编号为0,即数组的下标。那在程序中如何创建数组呢?
2025-02-18 18:01:57
1033
原创 Java:5_方法的使用
方法语法格式// 方法定义修饰符 返回值类型 方法名称([参数类型 形参 ...]){方法体代码;[return 返回值];示例一:实现一个函数,检测一个年份是否为闰年// 方法定义}else{示例二: 实现一个两个整数相加的方法// 方法的定义【注意事项】修饰符:现阶段直接使用public static 固定搭配。
2025-02-17 09:43:41
789
原创 Java:3_运算符
上述和等就是,不同运算符操作的含义不同。作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量。Java中运算符可分为以下:算术运算符(+ - */)、关系运算符(< > ==)、逻辑运算符、位运算符、移位运算符以及条件运算符等。
2025-02-13 12:47:18
939
原创 Java:2_数据类型与变量
字节是计算机中表示空间大小的基本单位.计算机使用二进制表示数据. 我们认为 8 个二进制位(bit) 为一个字节(Byte).我们平时的计算机为 8GB 内存, 意思是 8G 个字节.其中 1KB = 1024 Byte, 1MB = 1024 KB, 1GB = 1024 MB.所以 8GB 相当于 80 多亿个字节.
2025-02-11 06:00:00
1051
原创 C++进阶:2_多态
多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了Person。Person对象买票全价,Student对象买票半价。那么在继承中要构成多态还有两个条件必须通过基类的指针或者引用调用虚函数被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写**在虚函数的后面写上 =0 ,则这个函数为纯虚函数。包含纯虚函数的类叫做抽象类(也叫接口类),抽象类不能实例化出对象。**派生类继承后也不能实例化出对象,只有重写纯虚函数,派生类才能实例化出对象。
2024-08-31 15:57:32
1223
原创 C++进阶:1_C++中的继承
下面我们看到Person是父类,也称作基类。Student是子类,也称作派生类。很多人说C++语法复杂,其实多继承就是一个体现。有了多继承,就存在菱形继承,有了菱形继承就有菱形虚拟继承,底层实现就很复杂。所以一般不建议设计出多继承,一定不要设计出菱形继承。否则在复杂度及性能上都有问题。多继承可以认为是C++的缺陷之一,很多后来的OO语言都没有多继承,如Java。继承和组合(组合和继承都是一种复用)这里讨论共有继承public继承是一种is-a的关系。也就是说每个派生类对象都是一个基类对象。
2024-08-07 15:57:37
812
原创 C++初阶:10_模板进阶
一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有目标文件链接起来形成单一的可执行文件的过程称为分离编译模式。【优点】模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生增强了代码的灵活性【缺陷】模板会导致代码膨胀问题,也会导致编译时间变长出现模板编译错误时,错误信息非常凌乱,不易定位错误。
2024-08-07 15:54:58
633
原创 C++初阶:9.stack和queue
queue的文档介绍队列是一种容器适配器,专门用于在FIFO上下文(先进先出)中操作,其中从容器一端插入元素,另一端提取元素。队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素。元素从队尾入队列,从队头出队列。底层容器可以是标准容器类模板之一,也可以是其他专门设计的容器类。该底层容器应至少支持以下操作:empty:检测队列是否为空size:返回队列中有效元素的个数ront:返回队头元素的引用ack:返回队尾元素的引用。
2024-07-08 14:21:54
813
原创 list的模拟实现
要模拟实现list,必须要熟悉list的底层结构以及其接口的含义,通过上面的学习,这些内容已基本掌握,现在我们来模拟实现list。
2024-05-13 12:21:19
299
原创 C++初阶:8.list
list的文档介绍list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高效。与其他的序列式容器相比(array,vector,deque),list通常在任意位置进行插入、移除元素的执行效率更好。
2024-05-13 12:20:14
1084
原创 C++初阶:7.vector
vector的文档介绍vector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。
2024-04-11 22:09:12
1385
原创 C++初阶:6.string类
string类的文档介绍字符串是表示字符序列的类标准的字符串类提供了对此类对象的支持,其接口类似于标准字符容器的接口,但添加了专门用于操作单字节字符字符串的设计特性。string类是使用char(即作为它的字符类型,使用它的默认char_traits和分配器类型(关于模板的更多信息,请参阅basic_string)。string类是basic_string模板类的一个实例,它使用char来实例化basic_string模板类,并用char_traits和allocator作为basic_strin
2024-04-10 06:00:00
1066
原创 C++初阶:5.STL简介(了解)
STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。
2024-04-02 06:30:00
414
原创 C++初阶:4.模板初阶
类模版板不能声明和定义分离到两个文件(不是不能,是方式非常挫,后面模板进阶会详谈)class 类模板名// 类内成员定义// 动态顺序表// 注意:Vector不是具体的类,是编译器根据被实例化的类型生成具体类的模具public:, _size(0){}// 使用析构函数演示:在类中声明,在类外定义。~Vector();// 注意:类模板中函数放在类外进行定义时,需要加模板参数列表。
2024-04-01 18:30:22
828
原创 C++初阶:3.C/C++内存管理
int main()// new/delete 和 malloc/free最大区别是 new/delete对于【自定义类型】除了开空间还会调用构造函数和析构函数free(p1);delete p2;// 内置类型是几乎是一样的// Cfree(p3);delete p4;free(p5);return 0;
2024-04-01 06:30:00
1653
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人