
数据结构知识梳理
小小书童ss
吾生也有涯,而知也无涯 。以有涯随无涯,殆已!已而为知者,殆而已矣!为善无近名,为恶无近刑。缘督以为经,可以保身,可以全生,可以养亲,可以尽年。
展开
-
数据结构_线索二叉树-2020-6-4
线索二叉树:我们知道二叉树的非递归遍历算法,避免使用系统栈(耗费更多的内存资源),用户自定义栈(仅仅是保存访问的结点信息)代替系统栈。可以提升算法效率。线索二叉树是将用户栈也去掉,将遍历序列线索化进一步提升效率。对一个二叉链表 n个结点 , n+1 个空指针域,当n 很大的时候很浪费空间。于是将想办法将这些空的指针域利用起来。主要还是提升时间效率,应为在线索化过程中需要两个标志位 ltag ,rtag .如上图:ltag=0 :lchild 指向左孩子ltag=1:lchil...原创 2020-06-04 10:18:12 · 380 阅读 · 0 评论 -
数据结构_二叉树的非递归遍历方法2-2020-6-3
二叉树的非递归遍历:前序非递归遍历:(借助栈实现) 步骤1:根进栈,作为栈顶元素 步骤2:访问栈顶元素,指向栈顶元素的左孩子 ,当栈顶元素左孩子为空,栈顶元素出栈,然后指向其右孩子,当右孩子为空,继续出栈。 步骤3:重复步骤2 ,直到栈中元素为空 中序遍历非递归(借助栈实现) 步骤1:根结点入栈 ,作为栈顶元素 步骤2: 将栈顶元素的左孩子入栈,重复这个步骤,直到左孩子为空,然后访问栈顶元素,出栈,指向其右子树,如果右子树存在,继续进栈,否则,...原创 2020-06-03 11:04:26 · 332 阅读 · 0 评论 -
数据结构_二叉树的非递归遍历方法1-2020-6-2
二叉树的非递归遍历:前序非递归遍历:(借助栈实现) 步骤1:根进栈 步骤2:访问栈顶元素,出栈,然后将栈顶元素的右孩子,左孩子进栈。 步骤3:重复步骤2 ,直到栈中元素为空 中序遍历非递归(借助栈实现) 步骤1:根结点入栈 步骤2:将其左孩子依次入栈,当左孩子为空,访问栈顶元素,出栈 , 然后检查右孩子是否存在,如果存在,将右孩子入栈。 步骤3:重复执行步骤2,直到栈空。 后序非递归遍历(借助双栈实现)因为后序...原创 2020-06-02 10:50:20 · 569 阅读 · 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 · 670 阅读 · 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 · 277 阅读 · 0 评论 -
图论_最小生成树_2020-5-31
什么是生成树?一个连通图的生成树是指一个连通子图,它含有图中全部n个顶点,但只有足以构成一棵树的n-1条边。一颗有n个顶点的生成树有且仅有n-1条边,如果生成树中再添加一条边,则必定成环。什么是最小生成树?在连通网的所有生成树中,所有边的代价和最小的生成树,称为最小生成树。注意是在无向图中。求解最小生成树的两种经典方法! Kruskal 克鲁斯卡尔算法 :(加边法) Prim 普里姆算法算法 (加点法) 算法实现:Prim ...原创 2020-05-31 16:42:07 · 360 阅读 · 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 · 355 阅读 · 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 · 1543 阅读 · 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 · 417 阅读 · 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 · 136 阅读 · 0 评论 -
2020-4-21-栈
一:基本概率栈(stack):只允许在一端进行删除和插入的线性表栈顶(Top) :允许删除和插入的那一端栈底(Bottom):固定的,不允许操作的那一端空栈:没有任何元素的空表栈的操作:1 :初始化操作2 :判断栈是不是空栈3 :压栈操作4 :出栈操作5 :求栈长操作6 :取栈顶元素7:输出栈二 :C++代码实现(顺序栈和链...原创 2020-04-21 18:20:25 · 156 阅读 · 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 · 148 阅读 · 0 评论 -
数据结构基本概念梳理
1:名词 数据 数据元素 数据类型 抽象数据类型 数据结构 基本看下书就能明白2: 数据结构的三要素逻辑结构(数据元素之间的逻辑关系,根据需要,人为定义) 存储结构(存在计算机内存中的方式,合理利用内存空间,而且查找删除方便 。物理结构) 数据的运算逻辑结构: 线性结构:线性表 栈 队列 非线性结构:树 (一般树 二叉树) 图 (有向图 无向图...原创 2019-07-22 16:45:30 · 148 阅读 · 0 评论 -
数据结构02-线性表-2020-2-24
线性表:1: 基本概率线性表:具有相同的数据类型 n >=0个数据元素的有限序列。L =( a1a2a3....an )a1 :头元素 ,只有一个后继,没有前驱an : 尾元素, 只有一个前驱,没有后继其他元素,一个前驱,一个后继线性表按存储方式:顺序存储: 顺序表链式存储: 单链表,双链表,循环链表,静态链表(数组实现)2: 代码实现(C++)...原创 2020-02-24 16:13:24 · 138 阅读 · 0 评论 -
数据结构01-2020-2-24
程序=数据结构+算法线性结构:三要素1: 逻辑结构 线性结构:线性表,栈,队列 非线性结构:树、图、集合2:存储结构(物理结构) 顺序存储:连续的一片内存空间 数组 链式存储:非连续的一片内存空间 链表 索引存储:索引表 (关键字,地址) 散列存储: hash存储3:数据的运算 五个特征...原创 2020-02-24 11:21:58 · 109 阅读 · 0 评论