数据结构
111
qq_51339192
这个作者很懒,什么都没留下…
展开
-
最小生成树
MST:最小生成树,可能有多个,但是总权值之和是相同的,并且是最小的PrimKruskal原创 2021-12-17 15:28:32 · 135 阅读 · 0 评论 -
有向无环图(DAG)的表达形式
一个有向图不存在环DAG图一般用来化简表达式,比如树可以求表达式,但是有时候会有重复的算式出现,这时候可以用有向无环图来化简化简时,可以按照顶点中不可能出现相同的操作数来化简操作符能否合并要看他们的操作数是不是想同的,如果是相同的,则可以合并,每一层看有没有相同的操作符,如果有,看能不能合并用DAG图存储,得到的图是不唯一的,因为我们表达式生效的次序不同...原创 2021-12-17 15:05:14 · 919 阅读 · 0 评论 -
Floyd算法
各顶点间的最短路径第三行改为k,即我们可以通过k这个节点到另外顶点,即可以靠它中转后一段的距离小于前一段的才要改意思是允许在这个点中转,所有元素都要扫一遍k如果等于3,则包含了k=0=1=2的情况,因为是一层一层递归的eg:我们从v0->v3,中间要先经过v2,但是vo->v2我们不一定是最短路径,所以我们还要找v0->v1的,所以是依次递归Floyd可以计算负权值的问题,但是不能解决带有负权回路的问题,因为我们可以一直走带负权的,这样子权值会越来越小...原创 2021-12-17 14:33:23 · 81 阅读 · 0 评论 -
Dijkstra算法
可以求带权/无权图的单源最短路径Floyd算法可以求带权/无权图的各顶点间的最短路径如果有负权值的带权图,则DJ可能会失效,所以DJ不适用于有负权值的带权图原创 2021-12-11 15:30:37 · 136 阅读 · 0 评论 -
图的BFS和DFS
图在BFS时,我们从第一个要搜索的节点出发,依次找相邻的节点遍历,遍历过的节点则标记1即可,因为图存在回路,所以我们在遍历时可能会遍历到已经遍历过的节点用bool visited[Maxsize];来表示标记数组,初始为false,访问过为true...原创 2021-12-11 14:48:37 · 1804 阅读 · 0 评论 -
十字链表法和邻接多重表法
十字链表:有向图邻接多重表:无向图原创 2021-12-10 15:22:35 · 282 阅读 · 0 评论 -
邻接矩阵法和邻接表法
邻接矩阵:使用数组存储,是顺序存储,若两个点之间相互邻接,即有边对应,则在矩阵写1(无向图)有向图则是a->b有一条对应的有向边,则在邻接矩阵写1无向图的邻接矩阵是对称矩阵,应为一条边对应两个点对于无向图来说,求节点的度可以将邻接矩阵的一行/一列的非零数相加起来即可求出该节点的度有向图求出度即为行元素非0值相加,入度即为列元素非0值相加,求度即为二者相加即可如果是用邻接矩阵求带权图,则在有边相连的那个地方填上该边的权值即可,如果不存在边,则可以在上面写个∞,代码即为INF邻接矩阵适合存原创 2021-12-10 15:00:21 · 1632 阅读 · 0 评论 -
图的基本结构
图是多对多的数据结构图有顶点集和边集,顶点个数为|V|,也称为图的阶,边条数为|E| 对于图的任意一条边,他必须得连接两个顶点一个图的顶点集不能为空集,但是一个图的边集可以为空集图分为有向图和无向图,无向边就叫边,有向边称为弧一般探讨简单图顶点的度对于无向图:即为依附于该顶点的边的条数,记为TD(v)对于有向图:入度为进来该顶点的,记为ID(v)出度为出来的该顶点的,记为OD(v),有向图的顶点的度为入度和出度之和对于n个顶点的无向图G,若G是连通图,则最少有n-1条边,若G原创 2021-12-10 14:05:15 · 1147 阅读 · 0 评论 -
树与森林的遍历
树的先根遍历若树非空,则先访问根节点,然后再依次对每颗子树进行先根遍历树的先根遍历序列与二叉树的先序遍历序列相同树的后根遍历树的后根遍历序列与对应二叉树的中序遍历序列相同树的层次遍历森林的先序遍历也可以将森林转化为二叉树,然后对二叉树进行先序遍历即可森林的中序遍历也等同于对二叉树的中序遍历...原创 2021-11-21 16:21:10 · 195 阅读 · 0 评论 -
树的存储结构
双亲表示法(顺序存储)每个节点中保存指向双亲的指针如果你要增加一个新元素,我们可以直接加入新元素,然后把他的双亲节点赋值一下就好了我们增加数据元素,无需按逻辑上的次序存储我们要删除一个节点,可以直接把他的双亲指针设置为-1,即可,也可以把最后面的元素填充到被删除的元素的位置去,这样子不会造成空间浪费,然后再节点数-1即可,但是如果你删除的是一个根节点,那么还得找到他的孩子节点也要对应的删除,所以就有了查询的操作孩子表示法(顺序+链式存储)节点可以存放指向第一个孩子的指针孩子兄弟表示法(链式原创 2021-11-21 15:55:26 · 331 阅读 · 0 评论 -
线索二叉树
一棵树根据节点的遍历序列可以得到除了首尾节点外,每个节点都有前驱和后继普通二叉树缺点:每次中序遍历都只能从根节点开始如果一颗二叉树的左孩子指针和右孩子指针指向的是他的前驱和后继,而不是他的左右孩子的话,那我们就把这种类型的指针称为线索以上均为中序线索二叉树先序和后序的原理与中序一样,就是左右线索不一样其实线索二叉树就是利用了二叉树本身所存在的n+1个空链域,把它作为线索中序遍历找中序前驱的时候,我们要先中序遍历,然后用visit来访问线索二叉树节点的定义初步建成的线索二叉树的l原创 2021-11-21 14:40:27 · 486 阅读 · 0 评论 -
由遍历序列构建二叉树
给定一个遍历序列,不能确定一颗唯一的二叉树所以,要有两个才能推出,以下为两个的例子依次递归判断即可,每次要先找根节点,然后根据中序遍历找左右子树,然后依次递归两种遍历必需要包括中序遍历...原创 2021-10-26 15:02:06 · 125 阅读 · 0 评论 -
栈在括号匹配的应用
当我们遇到一个左括号时,我们就把他压入栈,遇到一个右括号,就把他出栈,并且检查是否与右括号匹配原创 2021-10-02 15:31:38 · 53 阅读 · 0 评论 -
数据结构线性表
#ifndef LinkList_h#define LinkList_h#include <iostream>#include <stdlib.h>#include <string>#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0using namespace std;#endif#ifndef Linklist2_h#define Linklist2_h#include "Li原创 2021-09-12 21:53:04 · 76 阅读 · 0 评论 -
数据结构栈
栈其实就是一种插入和删除操作受限的线性表在线性表中,插入和删除操作可以在任意位置进行,而在栈中,只能在一端进行,即只能在表尾插入和删除栈是后进先出的一种数据结构,即后面入栈的元素反而先出栈(LIFO)栈有空栈,即没有任何元素栈的栈顶和栈底指的是栈的可以插入元素的一端和栈的不可以插入元素的一端所以,栈这个数据结构的逻辑操作和线性表一样,只不过数据的运算:即插入和删除有所不同在查找栈时,大多数只要查找栈顶元素即可栈的题型:告诉你入栈顺序,考你有哪些合法的出栈顺序一般出选择题,可以自行判断原创 2021-09-25 16:59:04 · 83 阅读 · 0 评论 -
时间复杂度分析
时间复杂度分析1.纯循环有几层就是n多少方,一般循环2.递归快排和归并排序每层都是O(n),有logn层,所以是nlogn规模的复杂度二分logn,因为每次都是对半分,2的x次方等于n,所以x就是logn函数的渐近增长,我们在比如n方+n+1时,可以省略掉n+1,所以为n方的时间复杂度用常数1来取代程序中的所有加法函数,比如说x++,那么我们在运算的时候就可以把它当作1的累加,即把x当作1...原创 2021-09-05 15:20:59 · 1064 阅读 · 0 评论 -
树与二叉树
树的定义和基本术语树有根节点和分支节点和叶子节点,每个节点靠边来连接,每个节点里面存放的是数据空树 :节点数为0的树非空树:有且仅有一个根节点,没有后继的节点称为叶子节点,没有前驱的称为根节点,有后继的称为分支节点树的路径长度:即经过几条边节点的度:即每个节点有几个分支,度>0的为非叶子节点,=0的为叶子节点树的度:各节点的度的最大值森林:森林是m颗互不相交的树的集合,也允许有空森林的存在,即m=0树的常考性质1.节点总数=总度数+1m叉树:每个节点最多只能有m个孩子的树原创 2021-10-23 16:37:03 · 199 阅读 · 0 评论 -
数据结构队列
队列是只允许在一端进行插入,在另一端删除的线性表队列的插入操作称为入队,队列的删除操作称为出队一般从队尾进,队头出特点:先进入队列的元素先出队列(先进先出)FIFO队尾:允许插入队列的一端最靠近队尾的元素称为队尾元素对头:允许删除的一端最靠近对头的元素称为对头元素队列的基本操作队列的顺序实现1.队列的结构#define MaxSize 10typedef struct { ElemType data[Maxsize];//用静态数组存放队列元素 int front,rear;/原创 2021-09-28 17:10:03 · 162 阅读 · 0 评论 -
栈在表达式求值的应用
一般比较喜欢考察后缀表达式上图为中缀表达式的例子先计算a+b,然后把a+b当作整体与c计算,所以后缀表达式这么写也可以先计算b-c,然后把b-c当作整体,与a相加,因为a是在左边,所以写在左边,最后再写个加号即可后缀表达式的结果不唯一,取决于中缀表达式你要让哪个先算但是计算机遵循左优先原则,就是只要左边的运算符能先计算,就优先算左边的若后缀表达式合法,则最后栈中指挥留下最后一个元素,即计算结果后缀转中缀即我们扫后缀表达式,扫到运算符,则加进入并且加个括号即可在前缀.原创 2021-10-02 17:26:25 · 86 阅读 · 0 评论 -
哈夫曼树
原创 2021-10-23 17:10:57 · 103 阅读 · 0 评论 -
特殊矩阵的压缩存储
一维数组的存储结构ElemType a[10];各数组元素大小相同,且物理上连续存放(即地址)二维数组的存储结构二维数组在存储时候有行优先和列优先两种存放方法行优先就是一行一行存列优先就是一列一列存好处:可以把非线性的逻辑结构转化成为线性的内存结构,可以实现随机存取普通矩阵的存储可以用二维数组存储对称矩阵的压缩存储定义:若n阶方阵中任意一个元素ai,j,都有ai,j=aj,i,则称该矩阵为对称矩阵对称矩阵关于主对角线对称,所以对称矩阵的上三角区的元素和下三角区的元素相同,所原创 2021-10-03 16:47:15 · 137 阅读 · 0 评论