- 博客(87)
- 收藏
- 关注
原创 高阶数据结构之跳表
跳表的精髓就在于节点的随机层数以及相同层的指针指向相同层的节点这块,理解之后其实可以发现跳表的实现很简单。跳表能够做到性能和AVL树、红黑树差不多,并且实现更加简单,空间消耗更低,但是和哈希结构相比就没有这么大的优势了,因为哈希结构能够做到常数级别的查找,而跳表的优势在于a、遍历数据有序,b、空间消耗略小,c、哈希表有性能损耗,d、极端情况下哈希表需要红黑树结构补足。总的来说跳表是很强大的一个结构,并且实现很简单,这是它的一个巨大优势,但是实际使用中,还是需要根据需求来决定选择什么数据结构。
2025-01-16 13:01:26
1151
原创 高阶数据结构之B树
本文讲述了 B树的概念,以及插入和实现,也了解了B+树和B*树的概念,并且学习了B树的应用场景,MyIsam 和 InnoDB 两个存储引擎的区别也有所涉及,希望对大家有所帮助。
2025-01-13 14:50:17
1011
原创 高阶数据结构之图
图作为一个数据结构,是比较复杂的一类。包含顶点集合和边的集合,又分为有向图和无向图两类,图的存储方式又分为邻接矩阵和邻接表。而图有成环问题,因此图的遍历需要使用标记数组标记。而最小生成树的 Kruskal 算法和 Prim 算法,为了防止成环,Kruskal 算法每次找边的时候都会将边放入并查集进行查询,而 Prim 算法用顶点集合来判断边的终点是否已经在最小生成树中。
2025-01-04 19:54:31
751
原创 QT网络编程
Qt 给用户提供了网络编程的接口,包括TCP、UDP、HTTP三种协议的API以及各种类,可以了解一下。而在 QT 中想要使用网络编程,必须在pro文件中添加 network 模块,否则无法包含网络编程所需的头文件。
2024-08-04 17:30:44
806
原创 QT 的文件
文件类是每个语言都需要使用的类,C++的文件流、linux 的 open、read 、write 、C语言的 fopen、fread等,都是各个语言针对文件所设计的函数,QT 也不例外,希望本文能够对大家有所帮助。
2024-06-17 19:38:47
1025
原创 Qt 事件
本文总结了事件的概念,也写了多种事件的函数,用以了解事件的作用,并且还了解了事件分发器和过滤器的使用以及注意事项,相信对大家有所帮助。
2024-06-17 16:40:00
1240
原创 Qt 窗口
想要自定义对话框有两种方式:纯代码和图形化界面。纯代码方式必须先创建一个 Dialog 类,该类继承自 QDialog。首先先新建一个类,该类继承自 QDialog。然后在新建的类的构造函数中添加控件,这里的布局管理器不是必要的,只是为了美观。然后在 MainWindow 中给按钮添加槽函数,即点击按钮后显示一个对话框。可以看到,对话框中确实新增了按钮和 label。图形化界面方式定义对话框首先需要新建一个 ui 文件。由于本次是创建一个 Dialog,因此就选择这三个中的任意一个。
2024-05-31 19:50:38
896
原创 QT之常用控件
目前我们了解了QT项目中大部分常用的控件,以及其属性、信号和方法,也算是正式入门Qt了。不过本文并没有将所有的方法都写出来,不过实际上都挺简单的,各位使用到不熟的控件可以自行搜索用法。
2024-05-23 18:11:35
1888
1
原创 QT之信号和槽
作为一个前端工具,只有类自带的槽函数是不够用的,因此我们需要自定义槽函数。而自定义槽函数的连接有两种方式:通过connect 函数进行连接和通过图形化界面生成一个槽函数,QT自己通过 connectSlotByName 进行连接。在QT中,我们也可以自定义信号,虽然在开发场景中很少用,不过还是需要了解一下。QT中的信号实际上就是一个函数,我们看一看如何实现。在 MainWindow.h 中声明一个函数,其中这个函数前面需要用signals关键字修饰一下。
2024-04-30 17:50:29
1185
原创 QT初识
通过本文我们了解了 QT 能够通过图形化界面简单快速的实现一个页面,也能够通过代码直接使用控件。并且了解到 QT 开辟的内存可以通过挂在对象树的方式来控制生命周期,而不用手动释放。并且了解到一些前置的信号与槽的见到应用,以及QT的坐标系。相信对大家一定会有所帮助。
2024-04-23 17:55:31
1267
原创 MySQL 使用C语言
想要使用一个数据库,必须先初始化。通过该函数可以创建一个MYSQL句柄,用来后续操作,传递的值可以为空。本文总结了C/C++如何连接mysql,然后也介绍了连接的函数以及一些注意事项,也介绍了select时的特殊情况所用的函数,并进行了实践,希望对各位有所帮助。
2024-04-15 20:28:59
1348
原创 MySQL视图的语法以及限制
viewselect 语句;mysql能够通过创建视图的方式来创建一个虚拟表,它内容由select 语句决定。并且创建的视图的变化会影响到主表,主表的变化也会影响视图。其实我们能够发现,这个视图的使用方法和表没有区别。它的限制也和表类似。
2024-04-12 17:19:08
472
原创 MySQL事务管理
事务一般都是从用户的角度来看而非程序员的角度来看。概念:事务就是由一条或多条DML语句组成的集合,这些语句要么全部成功,要么全部失败,在逻辑上具有相关性。比如一个人想注销自己的某一个账户,那么当用户进行注销动作时,服务器就需要将数据库中的账户以及其相关联的数据全部清除,而注销这个操作就是一个事务。而一个数据库中肯定同时会存在多个事务运行,同一时刻有大量的请求被包装成一个事务,然后到服务器执行。如果一个事务只是单纯的多条语句的集合那么势必会出现问题。因此一个事务还具有以下属性。一个事务要么完成,要么不完成。
2024-04-12 16:30:35
1394
原创 MySQL索引
本文讲解了索引实际上就是一种特殊的数据结构,当表中有一个索引那么就会mysql底层就会根据索引创建一个B+树来存储索引和数据的键值对。然后根据是否是聚簇索引来判别是否存储数据还是存储地址。还了解到mysql每次提取数据都是按一个page提取的(16k),也明白了索引采用B+树的理由。其次本文也讲解了聚簇索引和非聚簇索引的区别,也讲解了各种索引的创建,删除和查看。相信本文对各位同学会提供一定的帮助。
2024-04-09 16:42:50
1510
1
原创 MySQL复合查询
本次讲解了select的多表查询,也明白了多表查询实际上就是将多表问题拆成一个个单表问题来解决,也了解到不同子查询,如单行,多行和多列,还有比如多行子查询使用的关键字,也明白了mysql中一切皆表,select所查询的结果实际上可以当成一个临时表来和from子句,where子句配合使用,还有union关键字的作用,相信会对大家有所帮助。。
2024-04-07 12:25:00
950
原创 MySQL表的约束
本篇博客总结了一些常见的约束,比如非空约束,默认约束,主键外键约束,zerofill约束等,也明白了约束是mysql用来保证数据正确性,防止数据冲突的一种手段。相信本篇博客能够帮助各位对mysql有更深的了解。
2024-04-02 20:02:36
653
原创 MySQL数据类型
以上就是mysql一些重要的类型以及讲解。我们不仅了解了整形类型,还有字符串类型以及时间类型,枚举类型和set类型。并且分别讲解了不同类型的长度,用法以及特殊之处,希望对各位有所帮助。
2024-04-01 20:41:05
750
原创 MySQL的操作
目前我们学习了数据库的增删查改和表的增删查改,也明白了数据库的删除和修改都是需要重点照顾的(防止出现bug),了解了DDL语句后,接下来还有其他语句需要学习,我们拭目以待。
2024-03-30 18:13:49
1186
原创 数据库基础
本次我们了解了mysql实际上是一种网络服务,通过mysql客户端像mysqld发送请求,然后mysqld从数据库中获取数据,明白了数据库实际上就是一种目录,表实际上是一种文件,只不过需要通过mysql登录访问并结合mysqld的引擎才能访问,也了解了mysql的架构,sql的语句分类和存储引擎是什么。
2024-03-28 11:51:05
1217
原创 C++11新特性的了解
C++11提供了许多强大的功能,并且在C++98的基础上完善了许多。新增的右值引用提高了C++的效率,lambada也方便了用户使用 algorithm 的函数,十分值得学习。
2024-01-26 15:51:44
768
原创 哈希(包含闭散列和开散列实现)
unordered_map是一种储存键值对(key,value)的关联式容器,能够通过key快速索引到其对应的value容器中,key值用于唯一的标示一个元素,value是一个对象,与key值关联,二者类型可以不相同和map不同,unordered_map并不会对元素进行排序,为了能在常数范围中找到key对应的value,通常将相同哈希值的键值对放在相同的桶中该容器对单个元素的访问比map快,但是在遍历元素自己的范围内效率低可以通过 [] 访问value迭代器至少是前向迭代器。
2024-01-17 09:22:30
917
原创 map和set
C++中有各种容器,其中有一种名为关联式容器,通过键值对的方式来记录对象,其中map和set就是经典的关联式容器,它们在数据的检索时的效率比序列式容器更高。
2024-01-13 15:33:44
1003
原创 红黑树的了解以及代码实现
红黑树相比于AVL树并不注重完全平衡,而是近似平衡,但因为AVL树需要不停的旋转来保持自身的结构,红黑树的增删结构相比于AVL树更优,而且红黑树的实现更为简单,因此一般都使用红黑树。二者的增删查改复杂度都是 O(logN)级别的。
2024-01-11 13:02:04
964
原创 二叉搜索树介绍以及实现
二叉搜索树又叫二叉排序树,它可以是一颗空树,又或者是有以下三个特点的树。若它的左子树不为空,则左子树的所有节点的值都小于根节点的值。若它的右子树不为空,则右子树的所有节点的值都大于根节点的值。它的左右子树也都是二叉搜索树。因为二叉搜索树具有以上三个特性,因此二叉搜索树的最优搜索次数为 O(log^2) ,最差搜索次数为 O(N)。此外,中序遍历一个二叉搜索树所得到的结果应该是一个有序的数组。
2024-01-02 17:31:24
1011
原创 C++特性之多态
不同的对象做相同的一件事会出现不同的状态,这就是多态。举个列子:比如普通人买车票要全价购买,而军人只用半价,这就是多态的一种体现。想要实现多态,需要以下条件通过基类的指针或者引用来调用子类对象的虚函数被调用的函数必须是虚函数虚函数:类成员函数前用virtual关键字修饰的函数我们可以实际看看如何实现多态。
2023-12-08 19:26:40
1257
原创 进程信号(linux)
信号是一种用于进程之间通信或操作的一种手段,通常一个进程会在任意时刻接收到系统发送的信号,因此信号也可以看做是一种进程事件异步通知的手段。一个进程可以对信号有三种操作:进程能够识别信号,但是进程收到信号后并不一定立马执行信号所对应的操作,也有可能是被临时记住,在后续的操作中执行信号的操作。当进程收到一个信号后,若是在执行更重要的代码时,就会将收到的信号保存在pcb中的位图结构中,用来标记是否收到该信号。注意:发送信号实际上就是修改进程pcb中的位图结构,修改对应的位置就是对应的信号。这些信号都有对应的宏定义
2023-11-17 20:42:15
399
原创 数据链路层
本篇博客讲述了以太网如何实现同一个局域网内的主机互相通信的原理,并且了解了为什么IP层需要进行分片。然后还知道主机之间通信必须要先通过ARP协议来保存IP地址对应MAC地址的映射关系。还了解了DNS和ICMP两个小玩意。
2023-08-15 11:25:52
497
原创 IP协议
本篇博客了解了什么是IP,IP协议的报头格式,以及报头各个属性的作用,然后还了解了什么是分片。而后了解到为了方便定位主机,提高传输效率,大佬们提出了网段划分,但是随之而来的是IP地址的不足,为了解决这个问题大佬提出了子网掩码的解决方法,还了解到一些特殊的IP地址以及IP地址的数量限制。后面又了解到私有IP的划分,还了解到不同局域网之间的主机进行通信的大致过程,还了解了路由以及每个节点维护的路由表。以上就是网络层协议的内容。
2023-08-12 21:07:36
426
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人