
数据结构与算法
文章平均质量分 91
郭敬仰
这个作者很懒,什么都没留下…
展开
-
数据结构与算法-主流算法搜集《二十》
二分查找算法public class BinarySearch { public static void main(String[] args) { int arr[] = {1, 2, 3, 4, 5}; System.out.println(binarySearch2(arr, 0, arr.length - 1, 4)); } //使...原创 2019-11-20 20:23:09 · 353 阅读 · 2 评论 -
数据结构与算法-图-笔记整理《十九》
图的基本理论图解决了什么问题线性表只有一个前驱一个后继节点的关系树也只能有一个前驱节点也就是父节点图可以表示多对多关系常用概念顶点边路径无向图顶点之间没有方向有向图顶点之间右方向带权图边带全值图的表示方式邻接矩阵邻接矩阵表示顶点之间相邻关系的矩阵,相邻的值为1不相邻的值为0邻接表邻接矩阵因为不存在的边也会分配空间造成空间的浪费,邻接表只关心存在的边...原创 2019-11-17 21:55:15 · 364 阅读 · 0 评论 -
数据结构与算法-树结构-多路查找树-笔记整理《十八》
二叉树问题分析二叉树需要加载到内存中,节点少的情况下没问题,节点多的情况下:在构建二叉树时需要多次io,构建速度慢节点海量,二叉树高度大,降低操作速度B树B树中的B是Balanced的意思,B树即多路平衡搜索树B树简介:B树的阶:节点最多子节点的个数B树的搜索:从根节点开始对节点的关键字进行二分查找,命中则结束;否则查询关键字所属范围的儿子节点,直到儿子指针为空或已是叶子节...原创 2019-11-15 19:17:09 · 301 阅读 · 0 评论 -
数据结构与算法-树结构-平衡二叉树-笔记整理《十七》
二叉排序树的弊端比如给数列{1,2,3,4,5,6},创建一颗二叉排序树,会出现如下情况:左子树为空,像一个单链表插入速度没有影响,但是查询速度会降低,因为每次都需要比较左子树,比单链表的情况还慢这时候就需要平衡二叉树平衡二叉树特点平衡二叉树可以是一颗空树左右子树的高度差不超过1,且左右两个子树都是平衡二叉树左旋步骤如下:创建一个新节点NewNode,值等于当前根节...原创 2019-11-03 22:56:23 · 244 阅读 · 0 评论 -
数据结构与算法-树结构-二叉排序树-笔记整理《十六》
为什么要用二叉排序树使用数组查找快,可以使用二分查找;插入元素需要整体移动,速度慢使用链表无论是否有序查找都慢添加数据快,不需要整体移动使用二叉排序树查找快,类似于二分查找添加快,类似于链表二叉排序树简介特点:任何一个节点它的左子结点小于等于当前节点,右子节点大于等于当前节点举例,对于数据(7,3,10,12,5,1,9)对于的二叉树为:二叉排序树创建与遍历创建流程:...原创 2019-10-22 10:22:53 · 257 阅读 · 0 评论 -
数据结构与算法-《开篇》
数据结构与算法-概述-笔记整理《一》数据结构与算法-数组与稀疏数组-笔记整理《二》数据结构与算法-队列实现-笔记整理《三》数据结构与算法-链表-笔记整理《四》数据结构与算法-栈-笔记整理《五》数据结构与算法-递归-笔记整理《六》数据结构与算法-排序算法-冒泡排序-笔记整理《七》数据结构与算法-排序算法-选择排序-笔记整理《八》数据结构与算法-排序算法-插入排序-笔记整理《九》数...原创 2019-10-17 14:25:52 · 821 阅读 · 0 评论 -
数据结构与算法-树结构-顺序二叉树-笔记整理《十五》
顺序存储二叉树特点顺序存储二叉树、数组的存储方式和树的存储方式,可以互相转换,即数组可以转换成树,树也可以转换成数组如图:可以转化为:顺序二叉树通常只考虑完全二叉树第n个元素的左子节点为 2 * n + 1第n个元素的右子节点为 2 * n + 2第n个元素的父节点为 (n-1) / 2n : 在二叉树中的第几个元素,在数组中代表元素的角标(从0开始编号)代码示例使用...原创 2019-10-10 20:03:22 · 248 阅读 · 0 评论 -
数据结构与算法-树结构-二叉树-笔记整理《十四》
为什么需要树形结构数组结构的特点优点:通过下标查找查找速度快、对有序数组可以通过二分查找提高速度缺点:如果检索某个具体的值或者插入元素,会整体移动效率低链表结构的特点优点:插入效率高缺点:检索时需要遍历所有节点查找树形结构的特点既保持了类似链表结构的插入效率,又保持了查找的效率,查找的特点很类似于数组的二分查找,比如二叉树:每个节点都一分为二,父节点相当于中间值,子节点相当于左右的...原创 2019-10-10 19:38:25 · 236 阅读 · 0 评论 -
数据结构与算法-查找算法-笔记整理《十三》
查找算法简介常见的查找算法有:线性查找、也称为顺序查找二分查找、也称为折半查找插值查找斐波那契查找线性查找代码示例int arr[] = { 1, 9, 11, -1, 34, 89 };// 没有顺序的数组 for (int i = 0; i < arr.length; i++) { if(arr[i] == -1) { System.out.prin...原创 2019-09-29 16:41:27 · 252 阅读 · 0 评论 -
数据结构与算法-排序算法-基数排序-笔记整理《十二》
基数排序简介基数排序又称桶排序,第一轮从个位数开始,先对根据个位数的位数分别放入对应的“桶”中,取出放入原数组完成第一轮排序;第一轮排完序过后,从十位数开始根据十位数的大小放入对应的“桶”中,位数不够的补0,完成第二轮排序。依次类推,直到最大的位数比较完为止基数排序图解思路比如有这样一个数组:arr[]={53,3,542,748,14,214}第一轮排序:第一轮排序后的结果为:ar...原创 2019-09-29 15:30:04 · 361 阅读 · 0 评论 -
数据结构与算法-排序算法-归并排序-笔记整理《十一》
归并排序图解归并排序思路归并排序将一个无序数组,逐渐分解,当分解的最小单位为1的时候开始逐渐合并为若干个有序数组,当合并数组的数量为1的时候合并结束,这时候合并操作将是一个重要的操作,因为每次合并都是将两个无序数组合并为新的有序数组。归并排序合并举例说明步骤说明以合并一个4,5,7,8,1,2,3,6数组为例数组被拆分为4,5,7,8与1,2,3,6两个数组初始化一个临时数组用来...原创 2019-09-28 20:16:24 · 250 阅读 · 0 评论 -
数据结构与算法-排序算法-快速排序-笔记整理《十》
快速排序基本思想从无序数组中按照一定规则选取一个数作为中间数字,然后整个数组按照这个数据分为两个独立的部分,其中的一部分所有的数据都比这部分小;然后按照这个规则继续拆分直到最后拆分的数据的最小单位为1;整个过程可以通过递归来实现示意图代码示例public class QuickSort { public static void main(String[] args) { ...原创 2019-09-28 15:20:56 · 212 阅读 · 0 评论 -
数据结构与算法-数组与稀疏数组-笔记整理《二》
背景二维数组如果数据很少的情况下,有很多默认值为0的无意义的数据,因此可转为稀疏数组转换思路原数组示例:转换后示例:思路描述:稀疏数组列固定为3,其中第一行第一列代表原始数组一共有多少行,第一行第二列代表原始数组有多少列,第一行第三列代表原始数组一共有多少个值需要转化稀疏数组从第二行开始,第一列代表原始数组第几行,第二列代表原始数组第几列,第三列代表具体的值稀疏数组的行数为:...原创 2019-09-24 21:21:52 · 261 阅读 · 0 评论 -
数据结构与算法-队列实现-笔记整理《三》
队列特点队列是一个有序列表,可以用数组或者链表来实现遵循先进先出的原则构造一个环形队列思路需要的变量maxSize、表示数组最大容量front、取数据时会向后移动,默认0,默认指向最后一个元素的后一位rear、加数据时向后移动,默认0arr[]、存放数据的数组构造思路默认front、rear为0新加一个数据rear后移一位取出一个数据front,后移一位当rea...原创 2019-09-24 21:23:47 · 335 阅读 · 0 评论 -
数据结构与算法-链表-笔记整理《四》
链表的分类链表分为:单链表,双向链表、单向循环链表单链表单链表添加实现思路添加分为直接添加与指定位置添加直接添加尾节点next指针直接指向新元素即可指定位置添加需要一个辅助指针temp,如图思路为:首先找到指定节点位置新节点的next指针指向辅助指针temp的下一个节点:node.next=temp.next辅助指针temp的下一个节点指向新节点:temp.next=...原创 2019-09-24 21:24:02 · 232 阅读 · 0 评论 -
数据结构与算法-栈-笔记整理《五》
栈的特点栈是一个先入后出的有序列表栈顶为变化的一端允许删除与插入、栈底为固定的一端栈的实现思路使用一个数组stack[]来存储栈元素定义一个栈顶指针top,默认值为-1有元素入栈操作时,top++;stack[top]=data;出栈操作:int value = stack[top];top–;return value;代码实现public class ArrayStac...原创 2019-09-25 19:26:58 · 198 阅读 · 0 评论 -
数据结构与算法-排序算法-冒泡排序-笔记整理《七》
基本介绍冒泡排序通过两两比较的思想如果发现逆序则交换,依次将较大的元素逐渐从前面移到后面实现思路原始数组:2,7,-1,10,19第一趟排序:(1) -1, 8, 20,11 2与7比较,2比7小,无需交换(2) -1, 8, 11, 20 8与-1比较,-1比8小,发...原创 2019-09-28 08:06:22 · 200 阅读 · 0 评论 -
数据结构与算法-递归-笔记整理《六》
递归概念简单来说就是自己调自己递归解决的问题数学问题:8皇后问题,迷宫问题用到递归的算法:快速排序、归并排序、二分查找、分治算法递归注意事项递归一定要向退出条件逼近、否者出现无限递归、导致栈溢出异常:StackOverflowError递归经典案例迷宫问题问题描述如图一个8X8的表格中,红色的代表墙,绿色的代表要到达的终点,让小球从指定地点到达绿色的位置。实现思路构造一...原创 2019-09-28 08:06:50 · 173 阅读 · 0 评论 -
数据结构与算法-排序算法-选择排序-笔记整理《八》
选择排序思想假设有一个数组,int[] arr = {2, 7, -1, 10, 19};先假如数组第一个元素2为最小值,依次与剩下的元素进行比较,如果发现有元素比这个值更小就刷新最小值,第一轮结束后会找到本轮的最小值,然后让这个最小值与元素2进行交换。第一个元素最小值确定之后,再假设第二个元素7为最小值,依次与-1,10,19如果中间发现有比7小的就刷新最小值,直到遍历完这个数组,让本轮...原创 2019-09-28 08:07:24 · 211 阅读 · 0 评论 -
数据结构与算法-排序算法-插入排序-笔记整理《九》
插入排序基本思路假设有一个数组,int[] arr = {2, 7, -1, 10, 19};第一轮假如2为一个有序表,7,-1,10,19为无序表,从无序表中抽出元素7与2进行比较,将2,7组成有序列表第二轮...原创 2019-09-28 12:48:52 · 219 阅读 · 0 评论 -
数据结构与算法-概述-笔记整理《一》
数据结构与算法关系程序=数据结构+算法数据结构分类数据结构分为:线程结构与非线性结构线性结构数据元素之间存在一对一的关系线性结构分为:顺序存储结构(数组)、链式存储结构(链表),其中顺序存储结构存储元素是连续的,链式存储结构不一定连续常用线性结构分为:数组、链表、队列、栈非线性结构二维数组、多维数组、树形结构、图结构...原创 2019-09-23 11:23:28 · 234 阅读 · 0 评论