数据结构与算法
数据结构的知识和常用的算法
PCC.
这个作者很懒,什么都没留下…
展开
-
第二章:数据结构和算法概述
2.1数据结构和算法的关系程序 = 数据结构 + 算法2.2线性结构和非线性结构数据结构包括:线性结构和非线性结构线性结构1、 线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系2、 线性结构有两种不同的存储结构,即顺序存储结构和链式存储结构。顺序存储的 线性表称为顺序表,顺序表中的存储元素是连续的3、 链式存储的线性表称为链表,链表中的存储元素不一定是连续的,元素节点中存 放数据元素以及相邻元素的地址信息4、 线性结构常见的有:数组、队列、链表和栈非线性结构非线性结原创 2021-11-03 09:40:50 · 64 阅读 · 0 评论 -
第三章:稀疏数组和队列
3.1稀疏sparsearray数组稀疏数组1、 基本介绍:当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组2、 稀疏数组的处理方法(1) 记录数组一共有几行几列,有多少个不同的值(2) 把具有不同值的元素的行列及值,记录在一个小规模的数组中,从而缩小程序的规模稀疏数组的表示方法1、 稀疏数组第一行的值分别对应的是【数组的行数】、【数组的列数】、【数组中除了0之外值不相同的个数】2、 稀疏数组其他行的值对应的是【数据的横坐标】、【数据的纵坐标】、【数据的值】原创 2021-11-03 09:45:04 · 79 阅读 · 0 评论 -
第三章:稀疏数组和队列
3.2队列什么是队列?1、 队列是一个有序列表,可以用数组或是链表来实现2、 遵循先入先出的原则。即:先存入队列的数据,要先取出。后存入的,后取出使用数组来模拟环形队列1、 尾索引的下一个为头索引时表示队列满,即(rear + 1)% maxsize == front2、 队列为空时:rear == front3、 循环队列的要点就是:在指针向后移动的时候要记得加一再取模,如增加一个元素时:rear =(rear + 1)% maxsize4、 循环队列实际元素的个数:(rear + ma原创 2021-11-03 09:49:50 · 52 阅读 · 0 评论 -
第四章:链表
4.1链表介绍链表是有序的列表,但是它在内存中不是顺序的链表特点小结1、 链表是以节点的方式来存储,是链式存储2、 每个节点包含 data域【data域用来存放节点的数据】, next域【next域中包含下一节点的地址,用来指向下一个节点】:指向下一个节点3、 链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定4.2单链表的应用实例使用单链表实现数据在链表尾部的插入(不考虑顺序)package com.atguigu03.linkedList;/** * @author p原创 2021-11-03 09:52:27 · 61 阅读 · 0 评论 -
第四章:链表
单链表的综合操作package com.atguigu03.linkedList;import java.util.Stack;/** * @author peng * @date 2021/11/2 - 21:53 * <p> * 简单的单链表实现 */public class SingleLinkedListDemo { public static void main(String[] args) { HeroNode heroNode1 = n原创 2021-11-08 08:24:23 · 249 阅读 · 0 评论 -
第四章:链表
使用单向环形链表解决Josepfu问题Josepfu问题简述Josephu 问题为:设编号为1,2,… n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m 的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。Josephu问题的解决思路:用一个不带头结点的循环链表来处理Josephu问题:先构成一个有n个结点的单循环链表,然后由k结点起从1开始计数,计到m时,对应结点从链表中删除,然后再从被删除原创 2021-11-10 10:34:24 · 409 阅读 · 0 评论 -
第五章:栈
使用数组模拟栈package com.atguigu04.stack;import java.util.Scanner;/** * @author peng * @date 2021/11/9 - 22:10 * <p> * 使用数组来模拟栈 */public class ArrayStackDemo { public static void main(String[] args) { //测试栈的使用 CalculatorArray原创 2021-11-18 10:03:50 · 43 阅读 · 0 评论 -
第五章:栈
使用链表模拟栈package com.atguigu04.stack;import java.util.Scanner;/** * @author peng * @date 2021/11/15 - 9:01 * * 使用单链表来实现栈,主要功能有push、pop、peek * push:实现push功能主要是,在入栈的时候,new一个头节点,再将新的头节点指向原来的头节点; * pop:实现pop功能主要是,在出栈的时候,将头节点变为原本头节点的下一个节点即可; * peek:实现原创 2021-11-18 10:04:52 · 50 阅读 · 0 评论 -
第五章:栈
栈实现综合计算器(中缀表达式)前缀表达式1、 又称波兰式,前缀表达式的运算符位于操作数之前,举例说明: (3+4)×5-6 对应的前缀表达式就是 - × + 3 4 5 62、 前缀表达式的计算机求值从右至左扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(栈顶元素和次顶元素),并将结果入栈;重复上述过程直到表达式最左端,最后运算得出的值即为表达式的结果中缀表达式:中缀表达式就是常见的运算表达式,如(3+4)×5-6【就是我们日常所使用的】。中缀原创 2021-11-18 10:08:48 · 203 阅读 · 0 评论 -
第五章:栈
中缀表达式转换为后缀表达式中缀表达式转换为后缀表达式原创 2021-11-18 10:11:07 · 149 阅读 · 0 评论 -
第六章:递归
迷宫问题package com.atguigu05.recursion;/** * @author peng * @date 2021/11/18 - 11:14 * * 使用递归解决迷宫问题 */public class MiGong { public static void main(String[] args) { //创建二维数组模拟迷宫 int[][] map = new int[8][7]; //使用数字1表示迷宫的墙原创 2021-11-19 10:23:45 · 72 阅读 · 0 评论 -
第六章:递归
八皇后问题package com.atguigu05.recursion;/** * @author peng * @date 2021/11/18 - 14:32 * * 使用递归解决八皇后问题 * 八皇后问题: * 任意的两个皇后不能放置在同一行、同一列或者同一对角线上 */public class Queue8 { //定义皇后的个数 int max = 8; //定义一个数组用来存放皇后的位置,数组元素的下标表示皇后所在的行,数组元素的值表示皇后所在的原创 2021-11-19 10:25:49 · 209 阅读 · 0 评论 -
第七章:排序算法
7.1排序算法的介绍排序也称排序算法(Sort Algorithm),排序是将一组数据,依指定的顺序进行排列的过程排序的分类:1、 内部排序:指将需要处理的所有数据都加载到内部存储器中进行排序2、 外部排序:数据量过大,无法全部加载到内存中,需要借助外部存储进行排序7.2排序的分类常见的排序算法:...原创 2021-11-25 09:45:51 · 53 阅读 · 0 评论 -
第七章:排序算法
7.3算法的时间复杂度度量一个程序(算法)执行时间的两种方法:1、 事后统计的方法这种方法可行, 但是有两个问题:一是要想对设计的算法的运行性能进行评测,需要实际运行该程序;二是所得时间的统计量依赖于计算机的硬件、软件等环境因素, 这种方式,要在同一台计算机的相同状态下运行,才能比较那个算法速度更快2、 事前估算的方法通过分析某个算法的时间复杂度来判断哪个算法更优时间频度一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句原创 2021-11-25 09:51:07 · 115 阅读 · 0 评论 -
第七章:排序算法
7.5冒泡排序基本介绍:冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大 的元素逐渐从前移向后部,就像水底下的气泡一样逐渐向上冒冒泡排序的优化思路:如果当前数列还不是有序数列, 那么每一轮都会发生位置的交换;如果当前数列已经是有序数列了,那么就不会发生位置的交换了。因此我们可以这样想,设置一个flag变量来监视每一轮是否发生了位置的交换,如果有则说明还不是有序数列;如果没有则说明当前数列已经是有序的原创 2021-11-25 09:55:10 · 67 阅读 · 0 评论 -
第七章:排序算法
7.6选择排序基本介绍:选择式排序也属于内部排序法,是从欲排序的数据中,按指定的规则选出某一 元素,再依规定交换位置后达到排序的目的选择排序思想:选择排序(select sorting)也是一种简单的排序方法。它的基本思想是:第 一次从arr[0]~arr[n-1]中选取最小值,与arr[0]交换,第二次从 arr[1]arr[n-1]中选取最小值,与arr[1]交换,第三次从arr[2]arr[n-1]中 选取最小值,与arr[2]交换,…,第i次从arr[i-1]~arr[n-1]中选取最小值,原创 2021-11-25 09:56:57 · 80 阅读 · 0 评论 -
第七章:排序算法
7.7插入排序插入排序法介绍:插入式排序属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的 适当位置,以达到排序的目的插入排序法思想:插入排序(Insertion Sorting)的基本思想是:把n个待排序的元素看成为 一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表插入排序思路图:package com.atguigu原创 2021-11-25 09:58:27 · 247 阅读 · 0 评论 -
第七章:排序算法
7.8希尔排序希尔排序法介绍:希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序希尔排序法基本思想:希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序; 随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止希尔排序算法示意图:package com.atguigu06.sort;/** * @author peng原创 2021-11-25 09:59:44 · 176 阅读 · 0 评论 -
第七章:排序算法
7.9快速排序快速排序法介绍:快速排序(Quicksort)是对冒泡排序的一种改进。基本思想是:通过一趟排序 将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分 的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个 排序过程可以递归进行,以此达到整个数据变成有序序列快速排序法示意图:package com.atguigu06.sort;/** * @author peng * @date 2021/11/20 - 15:01 * * 实现快速排序 *原创 2021-11-25 10:00:54 · 630 阅读 · 0 评论 -
第七章:排序算法
7.10归并排序归并排序介绍:归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一 起,即分而治之)归并排序思想示意图1-基本思想:归并排序思想示意图2-合并相邻有序子序列:再来看看治阶段,我们需要将两个已经有序的子序列合并成一个有序序列,比 如上图中的最后一次合并,要将[4,5,7,8]和[1,2原创 2021-11-25 10:02:12 · 147 阅读 · 0 评论 -
第七章:排序算法
7.11基数排序基数排序(桶排序)介绍:1、 基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶 子法”(bucket sort)或bin sort,顾名思义,它是通过键值的各个位的值, 将要排序的元素分配至某些“桶”中,达到排序的作用2、 基数排序法是属于稳定性的排序,基数排序法的是效率高的稳定性排序法3、 基数排序(Radix Sort)是桶排序的扩展4、 基数排序是1887年赫尔曼·何乐礼发明的。它是这样实现的:将整数按位数切割成不同的数字,然原创 2021-11-25 10:04:21 · 454 阅读 · 0 评论 -
第七章:排序算法
7.12常用排序算法总结与对比常用排序算法对比:重要概念:1、 稳定:如果 a原本在 b前面,而a=b , 排序之后 a仍然在 b的前面2、 不稳定:如果 a原本在 b的前面,而 a=b,排序之后 a可能会出现在 b的后面3、 内排序:所有排序操作都在内存中完成4、 外排序:由于数据太大,因此把数据 放在磁盘中,而排序通过磁盘和内存 的数据传输才能进行5、 时间复杂度: 一个算法执行所耗费的时间6、 空间复杂度:运行完一个程序所需内存的大小7、 n: 数据规模8、 k: “桶”的个数原创 2021-11-25 10:05:48 · 235 阅读 · 0 评论 -
第八章:查找算法
8.1查找算法介绍在java中,我们常用的查找有四种:1、 顺序(线性)查找2、 二分查找/折半查找3、 插值查找4、 斐波那契查找(没有掌握)8.2线性查找算法线性查找算法是最简单的一种查找算法。就是通过遍历数组,判断数组中每一个值与需要查找的值是否相等,从而做出判断的算法package com.atguigu07.search;import java.util.Scanner;/** * @author peng * @date 2021/11/23 - 11:40 * &原创 2021-11-26 09:15:21 · 170 阅读 · 0 评论 -
第八章:查找算法
8.3二分查找算法二分查找算法的介绍:二分查找算法是对有序数组进行查找的算法。通过将需要查找的值与数组中间位置的值比较,从而确定要查找的数在中间值的左半部分或者右半部分,利用递归的思想,得到最终的结果package com.atguigu07.search;import java.util.ArrayList;import java.util.Scanner;/** * @author peng * @date 2021/11/23 - 14:26 * 实现二分查找 */publi原创 2021-11-26 09:16:40 · 442 阅读 · 0 评论 -
第八章:查找算法
8.4插值查找算法插值查找原理介绍:1、 插值查找算法类似于二分查找,不同的是插值查找每次从自适应mid处开始查找2、 将折半查找中的求mid 索引的公式 , low 表示左边索引left, high表示右边索引right. key 就是前面我们讲的 findVal3、 int mid = low + (high - low) * (key - arr[low]) / (arr[high] - arr[low]) ;/插值索引/对应前面的代码公式: int mid = left + (right原创 2021-11-26 09:18:05 · 163 阅读 · 0 评论 -
第九章:哈希表
9.2哈希表的基本介绍哈希表的基本介绍:散列表(Hash table,也叫哈希表), 是根据关键码值(Key value)而直接进 行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表链式哈希表的结构:哈希表实质上就是一个数组,数组的每一个元素里面存放的是一条链表(也就是一个链表数组)。在存入数据时,根据要存入数据的id求出该数据应该存放在哪一条链表之上(通常是采用求模的方法:id % 数组的长度),之后将该原创 2021-11-26 09:21:34 · 969 阅读 · 0 评论 -
第十章:树结构的基础部分
10.1二叉树二叉树是一种数据结构,二叉树与数组、链表的比较:1、 数组存储方式的分析优点:通过下标方式访问元素,速度快。对于有序数组,还可使用二分查找提高检索速度缺点:如果要检索具体某个值,或者插入某个值(按一定顺序)会整体移动,效率较低【总结:数组便于查询,不适于插入】2、 链式存储方式的分析优点:在一定程度上对数组存储方式有优化(比如:插入一个数值节点,只需要将插入节点,链接到链表中即可,删除效率也很好)缺点:在进行检索时,效率仍然较低,比如(检索某个值,需要从头节点开始遍历)【总结原创 2021-11-29 11:28:25 · 271 阅读 · 0 评论 -
第十章:树结构的基础部分
10.2顺序存储二叉树顺序存储二叉树的概念从数据存储来看,数组存储方式和树的存储方式可以相互转换,即数组可以转换成树,树也可以转换成数组【总结:也就是用数组来实现二叉树的结构】顺序存储二叉树的特点:1、 顺序二叉树通常只考虑完全二叉树【注意:其他的树应该不行】2、 第n个元素的左子节点为 2 * n + 1【即:左孩子节点 = 父节点 * 2 + 1】3、 第n个元素的右子节点为 2 * n + 2【即:右孩子节点 = 父节点 * 2 + 2】4、 第n个元素的父节点为 (n-1) / 2【原创 2021-11-29 11:30:24 · 523 阅读 · 0 评论 -
第十章:树结构的基础部分
10.3线索化二叉树线索化二叉树就是在二叉树的基础上,将那些没有使用到的指针(如:叶子节点的左右指针),按照遍历的方式(前序、中序、后序)分别指向该节点的前驱和后继【暂时还没发现线索化二叉树的应用】线索二叉树基本介绍1、 n个结点的二叉链表中含有n+1【公式 2n-(n-1)=n+1】个空指针域。利用二叉链表中的空指针域,存放指向该结点在某种遍历次序下的前驱和后继结点的指针(这种附加的指针称为"线索")2、 这种加上了线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树 (Threaded Bin原创 2021-11-29 11:31:47 · 245 阅读 · 0 评论 -
第十一章:树结构实际应用
11.1堆排序堆排序的基本介绍:1、 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序2、 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值, 称为大顶堆, 注意 : 没有要求结点的左孩子的值和右孩子的值的大小关系3、 每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆4、 每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆(注意:一般升序采用大顶堆,降序采用小顶堆。因为原创 2021-12-03 17:20:41 · 318 阅读 · 0 评论 -
第十一章:树结构实际应用
11.2赫夫曼树赫夫曼树基本介绍:1、 给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度 (wpl)达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree), 还有的书翻译为霍夫曼树2、 赫夫曼树是带权路径长度最短的树,权值较大的结点离根较近赫夫曼树几个重要概念和举例说明:1、 路径和路径长度:在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为1,则从根结点到第L层结点的路径长度为L-原创 2021-12-03 17:22:45 · 761 阅读 · 0 评论 -
第十一章:树结构实际应用
11.3赫夫曼编码赫夫曼编码基本介绍:1、 赫夫曼编码也翻译为哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式, 属于一种程序算法2、 赫夫曼编码广泛地用于数据文件压缩。其压缩率通常在20%~90%之间通信领域中信息的处理方式:1、 定长编码这种处理方法实质:每一个字符都对应一个Ascll编码,将对应字符转换成相应的Ascll编码,再把Ascll编码转换成对应的二进制,就可以进行传输,不过这种处理方法有一个很严重的缺陷,那就是编码长度太长了!2、 变长编码变长编码原创 2021-12-03 17:28:43 · 582 阅读 · 0 评论 -
第十一章:树结构实际应用
11.4二叉排序树二叉排序树的介绍:二叉排序树:BST: (Binary Sort(Search) Tree), 对于二叉排序树的任何一个非叶子节点,要求左子节点的值比当 前节点的值小,右子节点的值比当前节点的值大。特别说明:如果有相同的值,可以将该节点放在左子节点或右子节点二叉排序树的构建与遍历较为简单直接在代码中实现二叉排序树的删除节点的思路,删除情况比较复杂,有下面三种情况需要考虑:1、 删除叶子节点 (比如:2, 5, 9, 12)(1) 需求先去找到要删除的结点 targetNode(原创 2021-12-03 17:39:31 · 243 阅读 · 0 评论 -
第十一章:树结构实际应用
11.5平衡二叉树平衡二叉树出现的原因介绍:因为二叉排序树可能会出现所有的节点都在同一棵子树上,导致出现二叉树变链表的情况,因此需要对二叉树进行调整,也就是所谓的平衡二叉树平衡二叉树的基本介绍:1、 平衡二叉树也叫平衡二叉搜索树(Self-balancing binary search tree)又被称为 AVL 树,可以保证查询效率较高2、 具有以下特点:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。平衡二叉树的常用实现方法有红黑树、AVL、替罪羊树、原创 2021-12-03 17:42:22 · 567 阅读 · 0 评论 -
第十二章:多路查找树
12.1二叉树与B树二叉树问题的讨论:二叉树需要加载到内存的,如果二叉树的节点少,没有什么问题,但是如果二叉树的节点很多(比如 1 亿),就存在如下问题:1、 在构建二叉树时,需要多次进行 i/o 操作(海量数据存在数据库或文件中),节点海量,构建二叉树时,速度有影响2、 节点海量,也会造成二叉树的高度很大,会降低操作速度多叉树:在二叉树中,每个节点有数据项,最多有两个子节点。如果允许每个节点可以有更多的数据项和更多的子节点,就是多叉树(multiway tree)B树的基本介绍:B 树通过重新原创 2021-12-06 09:49:07 · 556 阅读 · 0 评论 -
第十二章:多路查找树
12.2(2-3树)2-3树的基本介绍:2-3树是最简单的B树结构,具有以下特点:1、 2-3 树的所有叶子节点都在同一层.(只要是 B 树都满足这个条件)2、 有两个子节点的节点叫二节点,二节点要么没有子节点,要么有两个子节点3、 有三个子节点的节点叫三节点,三节点要么没有子节点,要么有三个子节点4、 2-3 树是由二节点和三节点构成的树2-3树应用案例:其他说明:除了 23 树,还有 234 树等,概念和 23 树类似,也是一种 B 树。 如图:...原创 2021-12-06 09:50:51 · 46 阅读 · 0 评论 -
第十二章:多路查找树
12.3B树、B+树和B*树B树的介绍:B-tree 树即 B 树,B 即 Balanced,平衡的意思。有人把 B-tree 翻译成 B-树,容易让人产生误解。会以为 B-树 是一种树,而 B 树又是另一种树。实际上,B-tree 就是指的 B 树对B树的说明:1、 B 树的阶:节点的最多子节点个数。比如 2-3 树的阶是 3,2-3-4 树的阶是2、 B-树的搜索,从根结点开始,对结点内的关键字(有序)序列进行二分查找,如果命中则结束,否则进入查询 关键字所属范围的儿子结点;重复,直到所对应的原创 2021-12-06 09:52:59 · 57 阅读 · 0 评论 -
第十三章:图
13.1图基本介绍为什么需要图?在需要表示多对多的关系的时,用图图是一种数据结构,其中结点可以具有零个或多个相邻元素。两个结点之间的连接称为边。 结点也可以称为顶点。图的基本概念:1、 顶点2、 边3、 路径4、 无向图5、 有向图6、 带权图看图说明:...原创 2021-12-06 09:54:20 · 46 阅读 · 0 评论 -
第十三章:图
13.2图的表示方式图的表示方式:1、 邻接矩阵(用二维数组来表示)邻接矩阵是表示图形中顶点之间相邻关系的矩阵,对于 n 个顶点的图而言,矩阵是的 row 和 col 表示的是 1…n 个点(邻接矩阵实质上就是,横坐标和纵坐标分别是结点,如果两个结点之间存在边,那么对应的位置就是1,否则就是0,这是按照个人的约定来设置)2、 邻接表(用链表来表示)(1) 邻接矩阵需要为每个顶点都分配 n 个边的空间,其实有很多边都是不存在,会造成空间的一定损失(2) 邻接表的实现只关心存在的边,不关心不存在的原创 2021-12-06 09:56:40 · 380 阅读 · 0 评论 -
第十三章:图
13.4图的深度优先遍历所谓图的遍历,即是对结点的访问。一个图有那么多个结点,如何遍历这些结点,需要特定策略,一般有两种访问策略:1、 深度优先遍历2、 广度优先遍历图的深度首先遍历思路:1、 深度优先遍历,从初始访问结点出发,初始访问结点可能有多个邻接结点,深度优先遍历的策略就是首先访问第一个邻接结点,然后再以这个被访问的邻接结点作为初始结点,访问它的第一个邻接结点,可以这样理解: 每次都在访问完当前结点后首先访问当前结点的第一个邻接结点2、 这样的访问策略是优先往纵向挖掘深入,而不是对一个结原创 2021-12-06 09:59:43 · 180 阅读 · 0 评论