![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
0110_
这个作者很懒,什么都没留下…
展开
-
数据结构-堆
堆:提及堆,往往会和另一种数据结构相关联,就是栈。对于栈的了解是要多于堆的,而然什么是堆?首先需要明白的是,堆和栈一样,也是一种数据结构。其次要了解的是堆的一般性质。堆的性质:堆是一棵完全二叉树并且这棵树要保证:父节点总是大于左右子树,而左右孩子无要求。例如下图:如下图就不满足性质2:构造:因为堆是一棵完全二叉树(自左至右排列)所以其可以用数组存储(自顶向下按顺序排放)。...原创 2022-03-15 21:35:35 · 215 阅读 · 0 评论 -
图-广度优先搜索
简介:广度优先搜索算法(又称宽度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想。其别名又叫BFS,属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。算法思想:首先访问起始顶点S,在一次...原创 2019-09-28 20:03:36 · 95 阅读 · 0 评论 -
图的存储结构
1. 邻接矩阵由于图的结构比较复杂,任意两个顶点之间都可能存在联系,因此无法以数据元素在存储区中的物理位置来表示元素之间的关系,即图没有顺序存储结构,但可以借助二维数组来表示元素之间的关系,即邻接矩阵表示法。1.1 图的表示若相应顶点之间有联系,则对应二维数组中元素赋值为1。如果是无向图,则顶点相互间的联系都要表示,即对应二维数组中的元素都要赋值。代码示例#include<io...原创 2019-09-29 08:43:40 · 146 阅读 · 0 评论 -
图-深度优先搜索
简介:深度优先搜索属于图算法的一种,是一个针对图和树的遍历算法,英文缩写为DFS即Depth First Search。深度优先搜索是图论中的经典算法,利用深度优先搜索算法可以产生目标图的相应拓扑排序表,利用拓扑排序表可以方便的解决很多相关的图论问题,如最大路径问题等等。一般用堆数据结构来辅助实现DFS算法。其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次。...原创 2019-09-29 14:10:48 · 161 阅读 · 0 评论 -
数据结构-二叉搜索树
简介:二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。构造过程:二叉搜索树的节点各项数据域同其他树形结构一样,包括数据域,指向自己左孩子和右孩子的指...原创 2019-10-03 16:23:52 · 119 阅读 · 0 评论 -
最小生成树-prim
最小生成树首先明白两个概念,什么是生成树以及最小生成树?相关概念引入:连通:如果顶点v和v’之间由路径,则称v和v’是连通的连通图:如果图中任意两个顶点都是连通的,则称其为连通图连通子图:子图中的顶点为原图的子集,且子图是连通的生成树: 一个极小连通子图,它包含图中所有顶点,但是仅包含n-1条边(n为顶点个数)最小生成树: 在生成树的基础上,其各边权值之和最小如何构建生成树?...原创 2019-10-03 16:24:12 · 143 阅读 · 0 评论 -
最小生成树-kruskal
kruskal原创 2019-10-03 16:24:25 · 264 阅读 · 0 评论 -
拓扑排序-AOV网
简介:对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边<u,v>∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。简单的说,由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排...原创 2019-10-03 16:24:40 · 338 阅读 · 0 评论 -
最短路径-Floyd
简介:Floyd算法又称为插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法,与Dijkstra算法类似。该算法名称以创始人之一、1978年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名。算法步骤:代码示例:#include<iostream>#include<algorithm>using namespace std;...原创 2019-10-04 11:18:15 · 94 阅读 · 0 评论 -
贪心-最短路径问题
Dijkstra简介:用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低。问题简介:...原创 2019-09-22 18:58:15 · 763 阅读 · 0 评论 -
字符串匹配(蛮力)
串匹配对基于同一字符表的任何文本串T(|T| = n)和模式串P(|P| = m);判定T中是否存在某一子串与P相同若存在,则返回子串P在T中的起始位置。版本A:int match_A(string T, string P){ int i = 0, j = 0; int n = T.length(), m = P.length(); while(i < n &&...原创 2019-10-05 19:03:43 · 1090 阅读 · 0 评论 -
数据结构-二叉树
简介:在计算机科学中,二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。这里我们二叉树的构建顺序是自上而下,自左至右。倘若节点为奇数个,则度数为1的节点,只有一个。类似下图所示。但是若节点不满足2^k - 1(k表示树的深度),则最后一层节点个数会出现不满的情况。图示:...原创 2019-09-22 11:04:34 · 187 阅读 · 0 评论 -
数据结构-单支二叉树
简介:在计算机科学中,二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。而然单链二叉树是指仅最左侧节点存在孩子节点,如下图所示。结果会导致二叉树很不平衡,但是实现比较简单。C语法实现:#include<bits/stdc++.h>using names...原创 2019-09-21 12:22:47 · 5114 阅读 · 0 评论 -
C++_队列(顺序表)
队列:与栈类似,不同的是,删除是在表头进行(先进先出) 队头:表头端 队尾:表尾端 队列的表示需要一个存储基地址 需要两个整型变量,来表示队头队尾位置,因此称这两个变量为队头指针、队尾指针struct queueNode{ int *base; int frontQ; int rearQ;};队列的初始化_顺序表同栈一样,通过数组保存...原创 2018-11-21 15:34:46 · 885 阅读 · 2 评论 -
C++_栈(顺序表)
栈:后进先出的线性表,仅限于在表尾进行插入和删除的线性表(先进后出)栈顶:表尾端 栈底:表头端栈的表示需要两个指针,一个指向栈顶,一个指向栈底 需要一个数据记录保存栈的最大容量struct stackNode{ int *base; int *top; int stacksize;};栈的初始化_顺序表创建一个数组,保存压栈的数据,并且栈底指针指向数组基地址...原创 2018-11-21 15:07:08 · 757 阅读 · 0 评论 -
数据结构-单链表
简介:单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。图示:C语法:两种实现第一种:#include<bits/stdc++.h>using namespace std;typ...原创 2019-09-11 17:22:50 · 132 阅读 · 0 评论 -
数据结构-双向链表
简介:双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。图示:C语法实现:#include<bits/stdc++.h>using namespace std;typedef struct Node{ int data; Node *nex...原创 2019-09-13 14:59:19 · 221 阅读 · 0 评论 -
数据结构-循环链表(双标志)
简介:循环链表是另一种形式的链式存贮结构。它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。图示:C语法实现:#include<bits/stdc++.h>using namespace std;typedef struct Node{ int data; Node *prior; Node *next;}*List;List tail ...原创 2019-09-13 16:28:02 · 164 阅读 · 0 评论 -
数据结构-循环链表(单标志)
简介:循环链表是另一种形式的链式存贮结构。它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。图示:C语法实现:#include<bits/stdc++.h>using namespace std;typedef struct Node{ int data; Node *prior; Node *next;}*List;void init...原创 2019-09-13 17:12:58 · 158 阅读 · 0 评论 -
关于C语法实现链表的问题分析
问题1:原创 2019-09-13 19:02:34 · 123 阅读 · 0 评论 -
数据结构-多叉树
简介:从图的角度看,树等价于连通无环图。因此与一般的图相同,树也由一组顶点以及连接与其间的若干条边组成。在计算机科学中,往往会在此基础上,再指定某一特定顶点,并称之为根。图示:如图所示,1号节点为根节点。为了便于区别,这里根代指根节点,节点代指除根节点外的其他节点。C语法实现:#include<bits/stdc++.h>using namespace std;#def...原创 2019-09-15 13:10:21 · 4162 阅读 · 0 评论 -
C++_栈(链表)
链表的表示数据同过结点保存,因此需要先声明结构体typedef struct stackNode{ int data; stackNode *next;}*stackLink;初始化因为不需要头结点,所以直接将结点置空就可以void createStack(stackLink &s){ s = NULL;}入栈先判断栈是否已满,非满...原创 2018-11-21 16:17:13 · 777 阅读 · 0 评论