
数据结构知识梳理
小小书童ss
吾生也有涯,而知也无涯 。以有涯随无涯,殆已!已而为知者,殆而已矣!为善无近名,为恶无近刑。缘督以为经,可以保身,可以全生,可以养亲,可以尽年。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
数据结构_线索二叉树-2020-6-4
线索二叉树: 我们知道二叉树的非递归遍历算法,避免使用系统栈(耗费更多的内存资源),用户自定义栈(仅仅是保存访问的结点信息)代替系统栈。可以提升算法效率。 线索二叉树是将用户栈也去掉,将遍历序列线索化进一步提升效率。对一个二叉链表 n个结点 , n+1 个空指针域,当n 很大的时候很浪费空间。于是将想办法将这些空的指针域利用起来。主要还是提升时间效率,应为在线索化过程中需要两个标志位 ltag ,rtag . 如上图: ltag=0 :lchild 指向左孩子ltag=1:lchil...原创 2020-06-04 10:18:12 · 394 阅读 · 0 评论 -
数据结构_二叉树的非递归遍历方法2-2020-6-3
二叉树的非递归遍历: 前序非递归遍历:(借助栈实现) 步骤1:根进栈,作为栈顶元素 步骤2:访问栈顶元素,指向栈顶元素的左孩子 ,当栈顶元素左孩子为空,栈顶元素出栈,然后指向其右孩子,当右孩子为空,继续出栈。 步骤3:重复步骤2 ,直到栈中元素为空 中序遍历非递归(借助栈实现) 步骤1:根结点入栈 ,作为栈顶元素 步骤2: 将栈顶元素的左孩子入栈,重复这个步骤,直到左孩子为空,然后访问栈顶元素,出栈,指向其右子树,如果右子树存在,继续进栈,否则,...原创 2020-06-03 11:04:26 · 346 阅读 · 0 评论 -
数据结构_二叉树的非递归遍历方法1-2020-6-2
二叉树的非递归遍历: 前序非递归遍历:(借助栈实现) 步骤1:根进栈 步骤2:访问栈顶元素,出栈,然后将栈顶元素的右孩子,左孩子进栈。 步骤3:重复步骤2 ,直到栈中元素为空 中序遍历非递归(借助栈实现) 步骤1:根结点入栈 步骤2:将其左孩子依次入栈,当左孩子为空,访问栈顶元素,出栈 , 然后检查右孩子是否存在,如果存在,将右孩子入栈。 步骤3:重复执行步骤2,直到栈空。 后序非递归遍历(借助双栈实现) 因为后序...原创 2020-06-02 10:50:20 · 580 阅读 · 0 评论 -
二叉树_链式存储-递归遍历
二叉树链式存储: 一个数据域和两个指针域 二叉树的遍历:(递归) 前序遍历:根左右 中序遍历:左根右 后序遍历:左右根 层次遍历:每一层,从左到右依次访问 求二叉树的深度 查找操作 如下图二叉树: 前序遍历: A B C D E F G H 中序遍历: C B E D F A H G 后序遍历: C E F D B H G A 层次遍历:A B G...原创 2020-06-01 11:33:32 · 685 阅读 · 0 评论 -
图论_拓扑排序_2020-5-31
AOV(Activity on Vertex network): 活动在顶点上的网 顶点: 表示活动 边:表示活动的先后顺序 拓扑排序: 有向无环图G,所有顶点排成一个线性序列 应用: 如下图要先要完成1,在2,3,->4,5 ->6 代码实现:上图的拓扑排序 有向无环图,邻接表存储 拓扑排序: /*@date: 2020-5-31@author:wbyAOV(Activity on Ver...原创 2020-05-31 17:16:16 · 283 阅读 · 0 评论 -
图论_最小生成树_2020-5-31
什么是生成树? 一个连通图的生成树是指一个连通子图,它含有图中全部n个顶点,但只有足以构成一棵树的n-1条边。一颗有n个顶点的生成树有且仅有n-1条边,如果生成树中再添加一条边,则必定成环。 什么是最小生成树? 在连通网的所有生成树中,所有边的代价和最小的生成树,称为最小生成树。 注意是在无向图中。 求解最小生成树的两种经典方法! Kruskal 克鲁斯卡尔算法 :(加边法) Prim 普里姆算法算法 (加点法) 算法实现: Prim ...原创 2020-05-31 16:42:07 · 370 阅读 · 0 评论 -
图论_最短路径_2020-5-29
什么是最短路径?: 从图中某一顶点(源点 S)到达另一顶点(终点 T)的路径可能不止一条,如何找到一条路径使得沿此路径上各边的权值总和(称为路径长度)达到最小。 如下图:(S,T) =1->2->4->6 =3+1+2= 6 求解最短路径两种经典方法 1:Dijkstra(迪杰斯特拉)算法:求解单源点最短路径 思想是按路径长度递增的次序一步一步并入来求取,是贪心算法的一个应用,用来解决单源点到其余顶点的最短路径问题。 2:Floyd(弗洛伊德)算法:求解...原创 2020-05-29 17:17:24 · 365 阅读 · 0 评论 -
2020-5-28-算法导论-图的最大流
网络最大流 1: 基本概率 2: 算法原理 3: Ford-Fulkerson,Edmonds-Karp算法C++代码实现(基于图的邻接矩阵实现) 什么是网络最大流问题? 网络最大流问题是关于流网络的:在不违背容量限制的条件下,求出从源点到汇点的最大流量。 什么是流网络? G=(V,E)是一个有向图 其中每条边(u,v)有一个非负的容量值c(u,v) 其中E包含任意一条边(u,v),那么图中就不存在它的反向边。 有两个特殊的结点,源结点s和汇点t。 .原创 2020-05-28 11:12:48 · 1563 阅读 · 0 评论 -
2020-5-21-图(邻接表邻接矩阵)DFS,BFS
图的基本概率: 点集V(vertexs)和边集 E(edges)组成 有向图和无向图 弧 Arc :<vi ,vj> 路径:相邻顶点序偶构成的序列 路径长度:路径上边的数目 图的存储结构: 邻接矩阵(顺序存储结构,无向图是对称的) 邻接表(链式存储结构) 代码实现: 1:邻接矩阵 (DFS ,BFS遍历) 2:邻接表( DFS ,BFS遍历) 1:邻接矩阵(DFS ,BFS遍历) ...原创 2020-05-21 11:46:13 · 431 阅读 · 0 评论 -
2020-4-24数据结构_队列
队列(Queue): 只允许在队头删除,也叫出队。 队尾插入,也叫入队。 特点:先进先出 First In First Out 与栈的特点相反 队头:Front 队尾:Rear 常见操作: 1:初始化队 2:判断队是否为空 3:入队操作 4:出队操作 5:获得队首元素 二:代码实现 1:顺序存储 2:链式存储 1:顺序存储 #include...原创 2020-04-24 16:09:10 · 146 阅读 · 0 评论 -
2020-4-21-栈
一:基本概率 栈(stack):只允许在一端进行删除和插入的线性表 栈顶(Top) :允许删除和插入的那一端 栈底(Bottom):固定的,不允许操作的那一端 空栈:没有任何元素的空表 栈的操作: 1 :初始化操作 2 :判断栈是不是空栈 3 :压栈操作 4 :出栈操作 5 :求栈长操作 6 :取栈顶元素 7:输出栈 二 :C++代码实现(顺序栈和链...原创 2020-04-21 18:20:25 · 170 阅读 · 0 评论 -
2020-4-19-双向链表
双链表: 结点有两个指针:指向前驱的prior 指针, 指向后继的next指针 代码实现: #include<iostream>using namespace std ;typedef int datatype;typedef struct note{ datatype data; struct note *next; struct note * prior;}D...原创 2020-04-19 10:39:41 · 161 阅读 · 0 评论 -
数据结构基本概念梳理
1:名词 数据 数据元素 数据类型 抽象数据类型 数据结构 基本看下书就能明白 2: 数据结构的三要素 逻辑结构(数据元素之间的逻辑关系,根据需要,人为定义) 存储结构(存在计算机内存中的方式,合理利用内存空间,而且查找删除方便 。物理结构) 数据的运算 逻辑结构: 线性结构:线性表 栈 队列 非线性结构:树 (一般树 二叉树) 图 (有向图 无向图...原创 2019-07-22 16:45:30 · 154 阅读 · 0 评论 -
数据结构02-线性表-2020-2-24
线性表: 1: 基本概率 线性表:具有相同的数据类型 n >=0个数据元素的有限序列。 L =( a1a2a3....an ) a1 :头元素 ,只有一个后继,没有前驱 an : 尾元素, 只有一个前驱,没有后继 其他元素,一个前驱,一个后继 线性表按存储方式: 顺序存储: 顺序表 链式存储: 单链表,双链表,循环链表,静态链表(数组实现) 2: 代码实现(C++) ...原创 2020-02-24 16:13:24 · 145 阅读 · 0 评论 -
数据结构01-2020-2-24
程序=数据结构+算法 线性结构:三要素 1: 逻辑结构 线性结构:线性表,栈,队列 非线性结构:树、图、集合 2:存储结构(物理结构) 顺序存储:连续的一片内存空间 数组 链式存储:非连续的一片内存空间 链表 索引存储:索引表 (关键字,地址) 散列存储: hash存储 3:数据的运算 五个特征...原创 2020-02-24 11:21:58 · 119 阅读 · 0 评论