老韩数据结构与算法
文章平均质量分 87
全文六万多字,建议放弃
dong24k
这个作者很懒,什么都没留下…
展开
-
第十二话 程序员常用的十种算法
12.1 二分查找算法(非递归) 12.1.1 算法的基本介绍 前面我们讲过了二分查找算法,是使用递归的方式,下面讲解的是二分查找算法的非递归方式 二分查找算法只适用于从有序的数列中进行查找(比如数字和字母等),将数列排序后再进行查找 二分查找法的运行时间为对数时间O(nlogn),即查找到需要的目标位置最多只需要logn步 12.1.2 二分查找算法(非递归)代码实现 数组{1,3,8,10,11,67,100},编程实现二分查找,要求使用非递归的递归的方式完成。 public class Binar原创 2021-04-27 14:09:22 · 228 阅读 · 0 评论 -
第十一话 图
11 图 为什么要有图 前面学习的线性表和树 线性表局限于一个直接前驱和一个直接后继的关系 树也只能有一个直接前驱也就是父节点 当我们需要表示多对多的关系时,这里就需要用到图 11.1 图的基本知识 图的常用概念 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mVcO26UD-1618541891258)(C:\Users\dongwei\AppData\Roaming\Typora\typora-user-images\image-20210408124420527.p原创 2021-04-27 14:08:11 · 76 阅读 · 0 评论 -
第十话 多路查找树
10 多路查找树 10.1 基础知识介绍 二叉树的问题分析 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HEei23Sn-1618541857473)(C:\Users\dongwei\AppData\Roaming\Typora\typora-user-images\image-20210408091745322.png)] 二叉树需要加载到内存中,如果二叉树的节点少,没有什么问题,但是如果二叉树的节点很多(比如一亿个左右),就会存在以下问题 问题一:在构建二叉树原创 2021-04-16 10:57:44 · 62 阅读 · 0 评论 -
第九话 树结构实际应用
9. 树结构实际应用 9.1 堆排序 9.1.1 堆排序的基本原理 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序 堆是具有一下性质的完全二叉树:每个节点的值都大于或等于其左右子节点的值,称为大顶堆。注意:没有要求节点的左右子节点的值的大小关系。 每个节点的值都小于或者等于其左右子节点的值,称为小顶堆 大顶堆 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3TXq3YD0-1618原创 2021-04-16 10:57:08 · 121 阅读 · 0 评论 -
第八话 树结构的基本知识
8. 树结构的基本知识 8.1 为什么需要树这种数据结构 数组存储方式的分析: 优点:通过小标方式访问元素,速度快,对于有序数组,还可以使用二分查找提高检索速度。 缺点:如果要检索具体某个值,或者插入值(按照一定顺序)会整体移动,效率低 链式存储方式的分析 优点:在一定程度上对数组存储方式有优化(比如:插入一个数值节点,只需要将插入节点,连接到链表中即可,删除效率也很高)。 缺点:在进行检索的时候,效率仍然很低,比如(检索某个值,需要从头节点开始遍历) 树存储方式的分析 能提高数据存储,读取的效原创 2021-04-16 10:56:15 · 120 阅读 · 0 评论 -
第七话 哈希表
7. 哈希表 7.1 哈希表的基本介绍 散列表(Hash Table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构,也就是说它通过把关键码映射到表中的一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lyZIpfXZ-1618541705884)(C:\Users\dongwei\AppData\Roaming\Typora\typora-user-image原创 2021-04-16 10:55:18 · 72 阅读 · 0 评论 -
第六话 查找算法
6. 查找算法 在java中我们常用的查找算法是: 顺序(线性)查找 二分查找/折半查找 插值查找 斐波那契查找 6.1 线性查找 代码实现 public class SeqSearch { public static void main(String[] args) { int[] arr = {1,9,11,-1,34,80}; int index = seqSearch(arr,11); if (index == -1){原创 2021-04-16 10:54:29 · 65 阅读 · 0 评论 -
第五话 排序算法
5. 排序算法 5.1排序算法介绍 排序算法(Sort Algorithm),排序是将一组数据,依指定的顺序进行排序的过程 排序的分类: 内部排序:指将需要处理的所有数据都加载到内部存储器中进行排序。 外部排序:数据量过大,无法全部加载到内存中,需要借助外部存储进行排序。 常见的排序算法分类 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-thpn5xWQ-1618541456962)(C:\Users\dongwei\AppData\Roaming\Typora\typo原创 2021-04-16 10:51:40 · 113 阅读 · 0 评论 -
第四话 递归
4. 递归 递归简单的说:递归就是自己调用自己,每次调用时传入不同的变量,**递归有助于编程者解决复杂的问题,**同时可以让代码变得简洁。 4.1 递归的两个小案例 4.1.1 打印问题 代码 package DataStructures; public class RecursionTest { public static void main(String[] args) { //通过打印回顾递归调用机制 test(4); } public st原创 2021-04-16 10:50:28 · 81 阅读 · 0 评论 -
第三话 栈
3. 栈 基础知识 栈的英文是stack 栈是一个先入后出的有序列表 栈是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表,允许插入和删除的一端,为变化的一端,称为栈顶(top),另一端为固定的一端,称为栈底(bottom)。 根据栈的定义,最先放入栈中元素的在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除。 出栈和入栈的概念示意图 栈的应用场景 子程序的调用:在跳往子程序之前,先将下一个指令的地址存到堆栈中,直到子程序执行完后再将原创 2021-04-16 10:49:31 · 151 阅读 · 0 评论 -
第二话 链表
2. 链表 2.1 链表原理介绍 链表是有序的列表,他在内存中的存储如下: 链表是以节点的方式存储 每个节点包含data域,next域:指向下一个节点 如图:发现链表的各个节点不一定是连续存储 链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定 单链表(带头结点)逻辑结构示意图:最后指向null表示链表结束 2.2 代码实现 这个并没有考虑顺序,直接添加到链表的尾部。 package DataStructures; public class SingleLinkedListDemo原创 2021-04-16 10:48:32 · 74 阅读 · 0 评论 -
第一话 稀疏数组和队列
数据结构的分类 线性结构 线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一应的线性关系 线性结构有两种不同的存储结构,即顺序存储结构(数组)和链式存储结构(链表),顺序存储的线性表称为顺序表,顺序表中的存储元素是连续的 链式存储的线性表称为链表,链表中的存储元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息。 线性结构常见的有:数据,队列,链表和栈 非线性结构 非线性结构包括:二维数组,多维数组,广义表,树结构,图结构。 1. 稀疏数组和队列 编写的五子棋程序中原创 2021-04-16 10:46:31 · 98 阅读 · 0 评论