![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构和算法
Echo*
养生
展开
-
程序员常用九大算法(二分查找(非递归)、分治、动态规划、KMP、贪心、普里姆、克鲁斯卡尔、迪杰斯特拉、弗洛伊德算法)
程序员常用十种算法:二分查找(非递归):就是不使用递归的二分查找,这里不做接收代码实现:package ten;public class BinarySearchNoRecur { public static void main(String[] args) { int[] arr = { 1, 3, 8, 10, 11, 67, 100 }; int i = binaryS...原创 2020-04-11 21:41:30 · 814 阅读 · 0 评论 -
数据结构与算法(多叉树 [ B、B+、B*树 ] 介绍、图遍历[ 深度优先 ( DFS )、广度优先 ( BFS ) ])
为什么会有多叉树(B树):因为二叉树存在问题:多叉树:B树的介绍:2-3树:B树:B+树:B*树:(M为树的度)图:图是一种数据结构,其中结点可以具有零个或多个相邻元素。两个结点之间的连接称为边。 结点也可以称为顶点 无向图:顶点之间的连接没有方向有向图:顶点之间的连接有方向图的表示方式:邻接矩阵:0表示不连通,1表示连通带权图:边上有数值的图...原创 2020-04-07 08:54:33 · 518 阅读 · 0 评论 -
数据结构和算法(二叉排序树、二叉排序树结点增加、删除和AVL树转化 [ 左旋转、右旋转 ] )
二叉排序树:二叉排序树 删除结点的 三种情况:第一种情况:删除叶子节点 (比如:2, 5, 9, 12)思路(1) 需求先去找到要删除的结点 targetNode(2) 找到targetNode 的 父结点 parent(3) 确定 targetNode 是 parent的左子结点 还是右子结点(4) 根据前面的情况来对应删除左子结点 parent.left = nu...原创 2020-04-06 10:53:02 · 150 阅读 · 0 评论 -
数据结构和算法(堆排序和哈夫曼树、哈夫曼编码、解码)
堆排序:一般使用大顶堆升序排列使用小顶堆降序排列下图为代码测试的树(数组格式)代码实现:import java.util.Arrays;public class HeapSort { public static void main(String[] args) { int[] arr = { 4, 6, 8, 5, 9 }; heapSort(arr); Syst...原创 2020-04-04 20:20:52 · 827 阅读 · 0 评论 -
数据结构和算法(查找算法[ 二分、插值 ]、哈希表构成、普通二叉树操作、线索化和遍历[ 前、中、后 ] 序)
常用查找算法:顺序(线性)查找二分查找/折半查找插值查找斐波那契查找顺序查找,按照顺序,遍历数组,比对数字,如果找到,返回下标,由于比较简单,不再介绍二分查找:二分查找思路分析:需要查找的数组必须是有序的,否则查找没有意义二分查找代码实现:public class BinarySearch { public static void main(String[] args)...原创 2020-04-03 09:49:46 · 247 阅读 · 0 评论 -
数据结构和算法(算法复杂度介绍和冒泡、选择、插入、希尔、快速、归并、基数排序分析实现)
排序介绍:算法的时间复杂度:时间频度概念:时间复杂度:平均使劲按复杂度和最坏时间复杂度:空间复杂度:排序:最简单的排序:冒泡排序相邻两个数比较,如果逆序,则交换,可以想象有两个指针在辅助排序过程:每一趟排序,数组最大的数就会确定,就像水泡冒出为什么循环次数是数组大小-1?因为每次循环后都会排序好的一个位置,最后一个数字不用排序,就是最小的那个。冒泡排序代码...原创 2020-03-29 23:26:36 · 182 阅读 · 0 评论 -
数据结构和算法(递归概念、迷宫回溯问题和八皇后问题代码实现)
递归的概念:迷宫问题(回溯)递归能够做解决什么问题?使用递归时需要注意的问题:迷宫回溯模拟:定义一个8×7的数组模拟迷宫:1表示围墙,0表示可以走的路图中左上红圈为起点,右下红圈为终点使用递归回溯找路说明1.map 表示地图2.i,j表示从地图的哪个位置开始出发3.如果小球能到map[6][5]位置,则说明通路找到4.约定:当map[i][j] 为 0 表示该点...原创 2020-03-28 11:47:35 · 275 阅读 · 0 评论 -
数据结构和算法(栈的模拟、前中后缀表达式、表达式求值步骤和思路)
1.栈的介绍栈的英文为(stack)栈是一个先入后出(FILO-First In Last Out)的有序列表。栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放...原创 2020-03-27 22:02:04 · 1157 阅读 · 0 评论 -
数据结构和算法(双向链表和单向环型链表-Josephu问题)
为什么会有双向链表?单链表的缺点分析:单向链表,查找的方向只能是一个方向,而双向链表可以向前或者向后查找单向链表不能自我删除,需要考辅助节点,而双向链表,则可以自我删除双向链表的结构:每个节点都有next和pre指针,next指向后,pre指向前分析双向链表的添加、遍历、删除遍历方式和单链表一样,只是可以向前遍历,或者是向后遍历添加(默认添加到链表的最后):先找到双向链表的最后一...原创 2020-03-24 23:16:08 · 229 阅读 · 0 评论 -
数据结构和算法(压缩矩阵和队列模拟)
稀疏数组的处理方法是:1.记录数组一共有几行几列,有多少个不同的值2.把具有不同值得元素的行列即值记录在一个小规模的数组中,从而缩小程序的规模二维数组转换稀疏数组的思维:1.遍历原始的二维数组,得到有效数据的个数sum2.根据sum就可以创建稀疏数组sparseArr int[sum+1][3]3.将二维数组的有效数据存入稀疏数组稀疏数组转二维数组的思维:1.先读取稀疏数组的第一行...原创 2020-03-09 13:35:32 · 400 阅读 · 0 评论