- 博客(291)
- 收藏
- 关注
原创 SQL 查询数据-连接查询
连接查询是一种多表查询方式,通过JOIN运算将多个表的数据有选择性地连接在一起。内连接(INNER JOIN)是最常用的连接方式,它只返回两个表中都存在的行。外连接(OUTER JOIN)包括左外连接(LEFT OUTER JOIN)、右外连接(RIGHT OUTER JOIN)和全外连接(FULL OUTER JOIN),它们分别返回左表、右表或两个表中所有存在的行,不存在的部分用NULL填充。连接查询的语法通常包括确定主表、连接表、连接条件以及可选的WHERE和ORDER BY子句。选择合适的JOIN类
2025-05-22 21:01:18
757
原创 SQL 查询数据-多表查询
SELECT查询不仅可以从单张表中获取数据,还可以通过多表查询同时从多张表中提取信息。多表查询的基本语法是SELECT * FROM <表1>, <表2>,这种查询方式称为笛卡尔查询,其结果集是两张表的行数乘积。例如,查询students表和classes表的数据,会返回students表的每一行与classes表的每一行的组合。为了避免结果集中列名重复的问题,可以使用表名.列名的方式引用列,并为列设置别名。此外,SQL还允许为表设置别名,以简化查询语句。多表查询还可以通过添加WHE
2025-05-22 19:38:01
589
原创 SQL 查询数据-聚合查询
SQL中的聚合查询是一种强大的工具,用于快速统计和计算数据库表中的数据。通过使用内置的聚合函数如COUNT()、SUM()、AVG()、MAX()和MIN(),可以轻松获取记录总数、合计值、平均值、最大值和最小值。例如,使用COUNT(*)可以统计表中的总记录数,而WHERE条件可以用于筛选特定数据,如统计特定性别的学生数量。此外,GROUP BY子句允许按一个或多个列进行分组,从而对每个分组进行聚合计算,如统计每个班级的学生人数。聚合查询的结果通常是一个二维表,可以通过设置别名来简化结果处理。总之,聚合查
2025-05-22 19:15:01
627
原创 SQL 查询数据-分页查询
分页查询在处理大数据集时非常有用,它通过将结果集分成多个小部分来显示,每次只加载一部分数据。在SQL中,这可以通过使用LIMIT和OFFSET子句实现。LIMIT指定每页显示的记录数,而OFFSET指定从哪条记录开始显示。例如,要显示第1页的3条记录,可以使用LIMIT 3 OFFSET 0;要显示第2页,则使用LIMIT 3 OFFSET 3,依此类推。分页查询的关键在于正确计算LIMIT和OFFSET的值,这通常基于每页的记录数(pageSize)和当前页码(pageIndex)。随着OFFSET值的增
2025-05-22 18:27:07
551
原创 矩阵扩展-算卷积算法介绍及C语言代码实现
接着上文,矩阵进行更深入的学习就需要学习更多的处理了,矩阵被运用在很多的领域,这里简单以计算机图形处理的重要概念——卷积,为例进行说明:卷积。用一个模板去和另一个图片对比,进行卷积运算。目的是使目标与目标之间的差距变得更大。卷积在数字图像处理中最常见的应用为锐化和边缘提取,此外,在人工智能中的图像处理也极为常见,这里的运算介绍不提供繁杂的公式(相信短时间内也看不懂)使用Zero padding,unit strides(零填充,单位滑动)的计算方式进行举例。
2025-05-07 21:14:39
714
原创 矩阵加减法操作及C语言代码实现
对于矩阵而言,我们首先要学习他的基本概念,其次就如同学习常规数字一样需要掌握基本的加减乘,再者,更具相关的概念学会求诸如秩,点阵,矩阵运算值等,接着学习一些特殊的矩阵操作,如矩阵的翻转,最后这些概念完善之后,请开始学习诸如矩阵的卷积核运算,稀疏矩阵,增广矩阵等这些特殊的矩阵。从C一路学习到C++,我们了解了面向对象的设计思路,那么,就让我们结合上一节学习的乘除法,设计一个简单的矩阵运算类,这样的设计,有助于以后的多次使用。通上文,简言之,两个矩阵相减,即它们相同位置的元素相减!
2025-05-07 21:06:46
281
原创 数据结构-归并排序(Python)
采用经典的分治策略,先递归地将当前数组平均分成两半,然后将有序数组两两合并,最终合并成一个有序数组。:从长度为 1 的有序子数组开始,依次将有序数组两两合并,直到合并成一个长度为 n 的有序数组。我们以 [0,5,7,3,1,6,8,4]为例,演示一下归并排序算法的整个步骤。:先递归地将当前数组平均分成两半,直到子数组长度为 1。
2025-05-05 17:58:00
542
原创 数据结构-希尔排序(Python)
将整个数组切按照一定的间隔取值划分为若干个子数组,每个子数组分别进行插入排序。希尔排序中用到的插入排序算法为原地排序算法,只用到指针变量 i、j 以及表示无序区间中第 1 个元素的变量、间隔数 gap 等常数项的变量。:在一次插入排序是稳定的,不会改变相等元素的相对顺序,但是在不同的插入排序中,相等元素可能在各自的插入排序中移动。因此,希尔排序方法是一种。我们以 [7,2,6,8,0,4,1,5,9,3] 为例,演示一下希尔排序的整个步骤。:介于 O(n×log2n) 与 O(n*n) 之间。
2025-05-05 12:23:45
412
原创 用数组实现模拟算法C/C++实现
数组这个概念并不陌生,然而,数组本身也是一种数据结构。数组在存储数据时是按顺序存储的,存储数据的内存也是连续的,所以他的特点就是寻址读取数据比较容易,插入和删除比较困难。简单解释一下为什么,在读取数据时,只需要告诉数组要从哪个位置(索引)取数据就可以了,数组会直接把你想要的位置的数据取出来给你。插入和删除比较困难是因为这些存储数据的内存是连续的,要插入和删除就需要变更整个数组中的数据的位置。所以数组对比链表,数组读取和使用更加灵活,而链表插入和删除更加便捷。
2025-05-02 07:00:00
347
原创 矩阵的介绍及乘法运算(附C语言实现代码)
这m×n 个数称为矩阵A的元素,简称为元,数aij位于矩阵A的第i行第j列,称为矩阵A的(i,j)元,以数 aij为(i,j)元的矩阵可记为(aij)或(aij)m × n,m×n矩阵A也记作Amn。注意:矩阵的概念很多,而且矩阵的运算属于计算机图形学,数学等学科的必备知识,其如果要完全写下来则完全可以写出一本书,本文知识简单介绍,矩阵的基本知识必备要了解加减乘除,其中以乘法在计算机中又使用众多。由 m × n 个数aij排成的m行n列的数表称为m行n列的矩阵,简称m × n矩阵。
2025-05-02 07:00:00
235
原创 C++中string字符串类型介绍
C语言中通过字符相连已经基本创造出了字符串的常规操作,然而,字符串在C语言中并不是常规类型,而是一个类似于数组的结构,在C++中,通过模板类的操作创建了。
2025-05-01 18:51:04
353
原创 字符串的KMP算法详解及C/C++代码实现
紧接上文,我们知道了暴力匹配的算法在时间运行上的缺陷,假设字符串T的长度为n,字符串P的长度为m,则整个算法的时间复杂度为O( n * m ),而对于一个复杂的现实情况而言 n >> m >> 2 (即n远远大于m,m远远大于常数),这样的计算计算机的负担很重。请思考一个暴力匹配的情况:给定一个主字符串T = “AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB”(47位)同时给定模式串 P = “AAAAAB”(6位)
2025-05-01 18:45:51
389
原创 C++字符串常用操作(二)
这并不是最理想的算法,但却这是字符串匹配算法中最容易理解的算法,算法核心为给定一个主串T和一个模式串P,求问是否P是属于T的一个字串,如:”Hello”中”llo”就是其中的一个字串,对于暴力匹配算法而言,我们可以利用两层循环进行比对,第一层循环中找寻T字符串中的每一个字符,第二层循环找寻的是每一个P字符,进入第二层循环时T字符串也会跟着进行字符前进,如果发生不匹配则产生一个回溯回到第一层循环的进入字符的下一个字符。输出Welcome Hello My 优快云.com。
2025-04-29 18:40:59
307
原创 C++字符串常用操作(一)
在程序设计中,字符串操作是必不可缺的,无论是工程设计还是算法设计均离不开字符串,字符串是由一个个单独的字符构成的串,其数据结构是线性的,常以ASCII码表示,同时只要设定得当,其展示任何一种编码也都是可以的。字符串有很多的操作,也有非常多的扩展算法,本文从设计的角度介绍这些基本的字符串操作以及其实现代码,本文实现的大多数代码诸如C和C++中的头文件<string.h>(C++则是<cstring>)已经封装好了相应的函数和方法可以直接使用。
2025-04-29 18:38:49
452
原创 C++STL之Map容器
也是一种关联容器,它是 键—值对的集合,即它的存储都是以一对键和值进行存储的,Map通常也可以理解为关联数组(associative array),就是每一个值都有一个键与值一一对应,因此,map也是不允许重复元素出现的。同时map也具备set的相关功能,其底层也会将元素进行自动排序。
2025-04-27 19:42:45
483
原创 set theory(集合论)
集合论,是数学的一个基本的分支学科,研究对象是一般集合。集合论在数学中占有一个独特的地位,它的基本概念已渗透到数学的所有领域。集合论或集论是研究集合(由一堆抽象物件构成的整体)的数学理论,包含了集合、元素和成员关系等最基本的数学概念。在我们还在高中教育阶段,可能或多或少会接触到一些诸如集合并交差的运算,而集合论与我们C++的STL运算有很多相似而相同的关系。
2025-04-27 19:37:07
537
原创 C++STL之Set容器
Set集合的底层使用一颗红黑树(可能读者对此不太了解,等但学到树论与图论的章节的时候就会明白原因),其属于一种非线性的数据结构,每一次插入数据都会自动进行排序,注意,不是需要排序时再排序,而是每一次插入数据的时候其都会自动进行排序。这也是前文学过的标准用法,接下来,让我们了解一个更加先进和便捷的方法,auto方法迭代,这需要我们编译器开启C11标准,每个编译器的开启标准不一,请具体情况具体分析。Set的性质有:数据自动进行排序且数据唯一,是一种集合元素,允许进行数学上的集合相关的操作。
2025-04-27 19:31:41
363
原创 数据结构-插入排序(Python)
将数组分为两个区间:左侧为有序区间,右侧为无序区间。每趟从无序区间取出一个元素,然后将其插入到有序区间的适当位置。插入排序在每次插入一个元素时,该元素会在有序区间找到合适的位置,因此每次插入后,有序区间都会保持有序。我们以 [5,2,3,6,1,4] 为例,演示一下插入排序算法的整个步骤。
2025-04-24 18:04:58
450
原创 数据结构-选择排序(Python)
选择排序方法在排序过程中需要移动较多次数的元素,并且排序时间效率比较低。每趟从未排序区间中选择一个值最小的元素,放到已排序区间的末尾,从而将该元素划分到已排序区间。:由于值最小元素与未排序区间第 11 个元素的交换动作是在不相邻的元素之间进行的,因此很有可能会改变相等元素的相对顺序,因此,选择排序法是一种。排序法所进行的元素之间的比较次数与序列的原始状态无关,时间复杂度总是 O(n*n)。我们以 [5,2,3,6,1,4][5,2,3,6,1,4] 为例,演示一下选择排序的整个步骤。
2025-04-24 17:52:34
465
原创 数据结构-冒泡排序(Python)
经过多次迭代,通过相邻元素之间的比较与交换,使值较小的元素逐步从后面移到前面,值较大的元素从前面移到后面。我们以 [5,2,3,6,1,4][5,2,3,6,1,4] 为例,演示一下冒泡排序算法的整个步骤。这个过程就像水底的气泡一样从底部向上「冒泡」到水面,这也是冒泡排序法名字的由来。接下来,我们使用「冒泡」的方式来模拟一下这个过程。
2025-04-24 08:57:08
1199
原创 C++STL之Priority_queue(优先队列)
优先队列是一种极其特殊的队列,他与标准的队列使用线性结构进行计算不同,优先队列的底层是以散列的状态(非线性)表现的,他与标准的队列有如下的区别,标准的队列遵从严格的先进先出,优先队列并不遵从标准的先进先出,而是对每一个数据赋予一个权值,根据当前队列权值的状态进行排序,使得权值最大(或最小)的永远排在队列的最前面。
2025-04-23 12:39:21
396
原创 C++STL之Queue容器
回顾一下之前所学的队列,队列和栈不同,队列是一种先进先出的数据结构,STL的队列内容极其重要,虽然内容较少但是请务必掌握,STL的队列是快速构建搜索算法以及相关的数论图论的状态存储的基础。标准的队列创建方法是直接创建空队列再进行其他的操作,由于队列的特殊性质,拥有其他容器的参数可以这样创建,这种多参数的方式可能有一些复杂,一般也很少这样使用。访问对头元素,可以返回其数值,也可以进行相应的操作,这里更加建议多使用front()访问队头数据,因为我们进行出队操作均是从队头进行出队的。访问队尾元素,较为少用。
2025-04-23 12:33:45
304
原创 C++STL之stack栈容器
回顾一下之前所学的栈,栈是一种先进后出的数据结构,而实现方式需要创建多个结构体,通过链式的方式进行实现,这是标准的栈的思路,而在STL中栈可以以更为简单的方式实现。头文件 #include<stack>格式为:explicit stack (const container_type& ctnr = container_type());我们以int类型作为参数为例进行创建,其创建方法与vector无异。
2025-04-22 11:09:54
422
原创 数组基础知识
数组(Array):一种线性表数据结构。它使用一组连续的内存空间,来存储一组具有相同类型的数据。简单来说,「数组」是实现线性表的顺序结构存储的基础。以整数数组为例,数组的存储方式如下图所示。如上图所示,假设数据元素的个数为 n , 则数组中的每一个数据元素都有自己的下标索引,下标索引从 0 开始,到 n−1结束。数组中的每一个「下标索引」,都有一个与之相对应的「数据元素」。从上图还可以看出,数组在计算机中的表示,就是一片连续的存储单元。
2025-04-22 11:02:15
1177
原创 算法复杂度
算法复杂度(Algorithm complexity):在问题的输入规模为 nn 的条件下,程序的时间使用情况和空间使用情况。「算法分析」的目的在于改进算法。正如上文中所提到的那样:算法所追求的就是所需运行时间更少(时间复杂度更低)占用内存空间更小(空间复杂度更低)。所以进行「算法分析」,就是从运行时间情况、空间使用情况两方面对算法进行分析。事后统计:将两个算法各编写一个可执行程序,交给计算机执行,记录下各自的运行时间和占用存储空间的实际大小,从中挑选出最好的算法。预先估算。
2025-04-21 19:23:00
977
原创 数据结构与算法
数据结构可以分为「逻辑结构」和「物理结构」。集合结构线性结构树形结构图形结构。顺序存储结构链式存储结构。「逻辑结构」指的是数据之间的关系,「物理结构」指的是这种关系在计算机中的表现形式。例如:线性表中的「栈」,其数据元素之间的关系是一对一的,除头和尾结点之外的每个结点都有唯一的前驱和唯一的后继,这体现的是逻辑结构。而对于栈中的结点来说,可以使用顺序存储(也就是顺序栈)的方式存储在计算机中,其结构在计算机中的表现形式就是一段连续的存储空间,栈中每个结点和它的前驱结点、后继结点在物理上都是相邻的。
2025-04-21 13:00:46
828
原创 C++STL之List容器
List链表的概念再度出现了,作为线性表的一员,C++的STL提供了快速进行构建的方法,为此,在前文的基础上通过STL进行直接使用,这对于程序设计中快速构建原型是相当有必要的,这里的STL链表是单链表的形式。头文件:#include<list>格式为:explicit list (const allocator_type& alloc = allocator_type());我们以int类型作为参数为例进行创建,其创建方法与vector无异。
2025-04-20 18:47:17
522
原创 C++STL之Vector容器
Vector可以翻译为向量,或向量数组,至于为什么以向量命名,可以理解为一维空间也是存在向量的。Vector是最简单的序列是容器,就像数组一样,向量使用连续的存储位置作为元素,这意味着它们的元素也可以使用常量指向其元素的偏移来访问,与数组一样有效。但与数组不同,它们的大小可以动态变化,其存储由容器自动处理。总结一下头文件:#include <vector>格式为:vector<Data_Types> name;我们以Int类型作为参数为例,进行创建。
2025-04-20 18:42:45
601
原创 C++STL教程入门
在上一篇文章我们已经基本的了解了什么是C++的STL(标准模板库),在本章中绝大多数内容都是在介绍常用的STL模板的使用以及其一些参数的介绍,但是请注意,STL由于其设计之初就容纳了大量的程序员思维结晶,经过了无数次的讨论才形成了一个统一的标准,他同时拥有大量的内容和知识点,如果完全讲解内容,展开完完全全可以写出一本500页的书,本篇还是以数据结构为主,因此,这里只是略讲,而且还主要是略讲与数据结构相关的容器,不是深入讲解。在这里引用本人的一位老师说的话:不学STL的C++是不完整的C++。
2025-04-20 18:35:45
351
原创 C与C++的区别
1980年,Bjarne Stroustrup博士着手创建一种新的语言,能够具有面向对象的程序设计特色。在当时,面向对象编程是一个新颖的概念,Stroustrup博士并不是从头开始设计新语言,而是使用C语言进行修改,而这就是C++语言。
2025-04-20 18:34:23
546
原创 循环队列的基本操作及C语言代码实现
我们初始化相比链表而言更为简单了,核心就在于申请空间以及将front指针和rear指针内容赋值为0,即指向第0个元素即可(注意第 0个元素内容为空)。
2025-04-20 18:31:17
664
原创 循环队列及假溢出的现象图文详解
我们已经明白了队列这种基本数据结构,对于顺序队列而言,其存在已经足够解决大多时候的设计问题了,但是其依旧存在一些缺陷和不足,因为我们的入队和出队操作均是直接在其后面进行结点的链接和删除,这就造成其使用空间不断向出队的那一边偏移,产生假溢出。什么是假溢出?
2025-04-20 18:22:50
467
原创 顺序队列的基本操作(入队出队遍历)及C/C++代码实现
如图,进行入队(push)操作的时候,我们首先需要特判一下队列是否为空,如果队列为空的话,需要将头指针和尾指针一同指向第一个结点,即front=n;rear=n。当如果队列不为空的时候,我们只需要将尾结点向后移动,通过不断移动next指针指向新的结点构成队列即可。
2025-04-20 18:18:48
415
原创 顺序队列的介绍及C/C++代码实现
在开始前,请牢记这句话:队列是一个先进先出的数据结构。队列(queue)是限定在表的一端进行插入,表的另一端进行删除的数据结构,如同栈的学习,请联系前文所学链表,试想一个单链表,我们只能对他的链表表尾进行插入,而只能对链表的表头进行结点的删除,其余一切的操作均不允许,这样强限制性的“链表“,就是我们所说的队列。如图:队列就像一个两端相通的水管,只允许一端插入,另一端取出,先放入管中的球先从管中拿出。
2025-04-20 18:13:49
438
原创 栈数组与栈链表C语言代码实现
PS:栈的概念被极大量的运用于各种程序设计之中,作为一种数据结构,其先进后出的特殊性质为很多算法的设计埋下伏笔,为之开通快车道。
2025-04-15 12:07:47
250
原创 栈的基本操作及C语言代码实现
如图:出栈(pop)操作,是在栈不为空的情况下(注意一定要进行判空操作),将栈顶的元素删除,同时top指针,next向下进行移动即可的操作。
2025-04-15 12:05:58
271
原创 循环链表的基本操作及C语言代码实现
与普通的单链表和双向链表的遍历不同,循环链表需要进行结点的特判,找到尾节点的位置,由于尾节点的next指针是指向头结点的,所以不能使用链表本身是否为空(NULL)的方法进行简单的循环判断,我们需要通过判断结点的next指针是否等于头结点的方式进行是否完成循环的判断。如图,对于插入数据的操作,基本与单链表的插入操作相同,我们可以创建一个独立的结点,通过将需要插入的结点的上一个结点的next指针指向该节点,再由需要插入的结点的next指针指向下一个结点的方式完成插入操作。
2025-04-14 22:13:55
472
原创 Python 算法-枚举算法
枚举算法我们也称之为穷举算法,这种算法就是在解决问题的时候去使用所有的方式去解决这个问题,会通过推理去考虑事件发生的每一种可能,最后得出结论。
2025-04-13 07:00:00
920
原创 Python 算法-递归算法
通过结果我们可以看到和图中所示一致,注意代码中的hanoi(n,a,b,c)表示为把A根柱子上的n个盘子通过B柱子移动到C柱子上,hanoi(n-1,1,3,2)然后就要执行hanoi(n-1,2,1,3),主要是通过这个递归函数来完成柱子的移动。我们在前面学习过递归函数,递归函数采用的就是递归算法,前面我们通过最常见的菲波那切数列去学习了递归函数,这一节我们再来详细了解一下递归算法。递归思想在我们的学习中经常会用到,如何巧妙的运用递归,可以参考一下前面递归函数中的内容。一共3个柱子,标号为1,2,3。
2025-04-13 07:00:00
508
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人