数据结构
文章平均质量分 84
GOV_D
知道的愈多,愈发现自己的无知
展开
-
快速排序算法【从双路快排到三路快排】
快排的基本思想是:1.先从数列中取出一个数作为基准数。2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。3.再对左右区间重复第二步,直到各区间只有一个数。void quickSort(int* seq, int low, int high) {//快速排序算法,用于电梯扫描算法中 if (low < high) { int i = low, j = high; int temp = seq[i]; while (i < j) { while原创 2021-09-03 11:22:28 · 328 阅读 · 0 评论 -
一文看懂B-树,B+树(带你看懂MySQL索引知识)
文章目录前言BST树 --- 二叉排序树AVL树 --- 平衡二叉树B-树 --- 平衡多路查找树B-树的特点B-树的查找结点B-树的添加结点过程(和结点分裂过程)B-树的删除结点B+树MySQL的索引为什么要使用B+树结构磁盘IO与索引效率的关系前言本文是在查看了很多大佬的文章后归纳总结得出,参考文章:https://blog.csdn.net/u014453898/article/details/112469113https://blog.csdn.net/a519640026/article原创 2021-08-11 13:44:18 · 648 阅读 · 0 评论 -
二叉搜索树登场
前言:最近作了不少关于二叉搜索树的题目,发现很多题目都通过利用二叉搜索树的性质解决,套路都相差无几,这里做个总结。二叉搜索树的性质若它的左子树不为空,则其左子树上的所有结点的值均小于它根节点的值若它的右子树不为空,则其右子树上的所有结点的值均大于它根节点的值它的左,右子树也分别为二叉搜索树二叉搜索树的中序遍历是从小到大的有序数列前三点是二叉搜索树类题目解题的必然性质,最后一点是解题用的常用思路。解决二叉树类题目的两种方法:一.递归确定传入参数和返回值确定终止条件确定要使用何种遍历原创 2021-04-24 10:04:19 · 75 阅读 · 0 评论 -
Trie Tree (前缀树)的实现和基本应用
介绍 Trie????Trie 是一颗非典型的多叉树模型,多叉好理解,即每个结点的分支数量可能为多个。为什么说非典型呢?因为它和一般的多叉树不一样,尤其在结点的数据结构设计上,比如一般的多叉树的结点是这样的:class TreeNode { int value; //结点值 TreeNode children[NUM]; //指向孩子结点};而 Trie 的结点是这样的(假设只包含’a’~'z’中的字符):class TrieNode { boolean原创 2021-04-17 09:36:54 · 91 阅读 · 0 评论 -
单调栈---高低高问题的神器
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、单调栈是什么?二、模拟单调栈的使用单调栈的应用前言哟哟哟,这不单调栈吗?几天不见这么拉了。哈?你说单调栈是啥?其实之前我也不知道,直到前几天在力扣做了道题才接触到单调栈这一数据结构,开始还有点看不懂;后面搞清楚之后发现这玩意在一些类型的题目上特别好用有木有。一、单调栈是什么?顾名思义,单调栈中存放的数据应该是有序的,所以单调栈也分为单调递增栈和单调递减栈(1)单调递增栈:单调递增栈就是从栈底到栈顶数据是从大到原创 2021-03-27 10:47:41 · 405 阅读 · 0 评论 -
数据结构---图
文章目录一、图的定义和基本术语图的基本定义图的基本术语二、图的存储结构邻接矩阵邻接表三、图的遍历深度优先遍历(DFS)广度优先遍历(BFS)四、图的应用最小生成树普利姆(prim)算法克鲁斯卡尔(kruskal)算法最短路径迪杰斯特拉(dijkstra)算法弗洛伊德(Floyd)算法拓扑排序一、图的定义和基本术语图的基本定义图(Graph)是由顶点的有穷非空集合和顶点之间的边组成,通常表示为:G(V,E),其中,G 表示一个图,V 是图 G 中顶点的集合,E 是图 G 中边的集合。1.线性表中将.原创 2021-02-28 23:12:34 · 1953 阅读 · 0 评论 -
数据结构---树
文章目录一、树的定义树的基本术语二、二叉树二叉树的定义二叉树的特点:特殊的二叉树==二叉树的性质==二叉树的存储结构三 、二叉树的遍历前序遍历中序遍历后序遍历层序遍历四 、线索二叉树四 、树、森林与二叉树的转换一、树的定义树的基本术语1.结点:树中的一个独立单元,包含一个数据元素及若干指向其子树的分支。2.结点的度:结点拥有的子树数称为结点的度3.树的度:树内各结点度的最大值4.叶子:度为0的结点称为叶子结点或者终端结点5.双亲和孩子:结点的子树称为该结点的孩子,对应的,该结点称为孩子的双亲原创 2021-02-26 13:49:28 · 307 阅读 · 2 评论 -
数据结构---字符串BF和kmp匹配算法
文章目录一、字符串二、BF匹配算法三、KMP匹配算法一、字符串和线性表类似,字符串也有顺序存储和链式存储两种存储方式1.顺序存储#define maxsize 255typedef struct { char ch[maxsize]; int length;}sstring;这种定义方式是静态的,在编译时刻就确定了字符串的空间的大小,但在很多情况下,事先确定大小是不方便的,也不方便后续处理。最好是根据实际需求,在程序执行过程中动态分配和释放字符数组空间。有一个称为堆的自由存储区,可以.原创 2021-02-23 16:24:25 · 245 阅读 · 0 评论 -
数据结构---栈和队列
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一、栈顺序栈的实现和基本操作链栈的实现和基本操作栈和递归算法的关系二、队列循环队列(顺序队列)的实现和操作链队的实现和操作一、栈栈的定义和特点:栈是限定在表尾进行插入或者删除操作的线性表,表尾称为栈顶,表头称为栈底,不含元素时称为空栈。栈具有后进先出的特点,可以理解为一个弹夹,压入的一个个元素就相当于子弹,后压入的子弹总是先打的。栈的实现栈的实现有顺序栈和链栈两种1.顺序栈:采用顺序存储结构实现栈存储结构;2.链原创 2021-02-22 17:06:38 · 230 阅读 · 0 评论 -
数据结构---数组与链表
c提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一、数组二、链表三、数组和链表的选择四、链表的基本使用和算法一、数组数组的特点1.在内存中,数组是一块连续的区域2.数组需要预留空间,在使用前需要提前申请所占内存的大小,不知道需要多大的空间,可能会浪费内存空间,即数组空间利用率低3.在数组起始位置处,插入数据和删除数据效率低。插入数据时,待插入位置的的元素和它后面的所有元素都需要向后搬移删除数据时,待删除位置后面的所有元素都需要向前搬移4.随机访问效率很高,是原创 2021-02-21 22:05:34 · 309 阅读 · 0 评论 -
数据结构---时间复杂度与空间复杂度
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一、评价算法优劣的基本标准二、时间复杂度三、空间复杂度一、评价算法优劣的基本标准(1)正确性。在合理的数据输入下,能够在有限的运行时间内得到正确的结果(2)可读性。一个好的算法,应该便于人们阅读和互相交流,其次才是机器可执行性。(3)健壮性。当输入的数据非法时,好的算法能适当做出正确反应和处理,而不是出现莫名其妙的输出结果。(4)高效性。高效性包括时间和空间两个方面。时间高效值算法设计合理,执行效率高,用时间复杂度来衡量原创 2021-02-20 22:12:52 · 259 阅读 · 0 评论