Java数据结构与算法
代码部分为练习代码,为了方便可能违反代码编写规范,见谅!
咣咣咣.
删库跑路中......
展开
-
数据结构和算法(39)之迷宫问题
学习数据结构和算法的日常Demo说明:小球得到的路径,和程序员设置的找路策略有关即:找路的上下左右的顺序相关再得到小球路径时,可以先使用(下右上左),再改成(上右下左),看看路径是不是有变化代码实现public class MiGong { static int count = 0; public static void main(String args[]) ...原创 2020-04-26 23:30:41 · 287 阅读 · 0 评论 -
数据结构和算法(38)之八皇后问题
学习数据结构和算法的日常Demo八皇后问题介绍八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯.贝瑟尔于1848年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任意两个皇后都不能处于同一行、同一列或同一斜线上,问共有多少种摆法。思路分析第一个皇后先放第一行第-列第二个皇后放在第二行第一 列、然后判断是否OK, 如果不OK,继续...原创 2020-04-26 23:16:27 · 283 阅读 · 0 评论 -
数据结构和算法(37)之骑士周游算法
学习数据结构和算法的日常Demo骑士周游算法介绍算法分析代码实现public class HorseChessBoard { private static int X = 8; // 棋盘的列数(左右) private static int Y = 8; // 行数(上下) // 创建数组,标记棋盘的各个位置是否被访问过 private...原创 2020-04-09 16:10:32 · 614 阅读 · 0 评论 -
数据结构和算法(36)之弗洛伊德算法
学习数据结构和算法的日常Demo弗洛伊德算法介绍弗洛伊德算法分析以A顶点作为中间顶点是,B->A->C的距离由N->9,同理C到B;C->A->G的距离由N->12,同理G到C更换中间顶点,循环执行操作,直到所有顶点都作为中间顶点更新后,计算结束代码实现public class FloydAlgorithm { privat...原创 2020-04-09 16:00:30 · 1285 阅读 · 1 评论 -
数据结构和算法(35)之克鲁斯卡尔算法
学习数据结构和算法的日常Demo克鲁斯卡尔算法介绍克鲁斯卡尔算法实例问题图解在含有n个顶点的连通图中选择n-1条边,构成一棵极小连通子图,并使该连通子图中n-1条边上权值之和达到最小,则称其为连通网的最小生成树。第1步:将边<E,F>加入R中。 边<E,F>的权值最小,因此将它加入到最小生成树结果R中。第2步:将边<C,D>加入R...原创 2020-04-07 16:26:28 · 358 阅读 · 0 评论 -
数据结构和算法(34)之普利姆算法
学习数据结构和算法的日常Demo最小生成树介绍普利姆算法介绍普利姆算法应用场景思路分析public class PrimAlgorithm { public static void main(String args[]) { String s = "ABCDEFG"; char[] chars = s.toCharArray(); ...原创 2020-04-04 15:29:18 · 295 阅读 · 0 评论 -
数据结构和算法(33)之贪心算法
学习数据结构和算法的日常Demo贪心算法基本介绍贪心算法应用场景思路分析public class GreedAlgorithm { public static void main(String args[]) { // 创建电台集合,放入一个Map HashMap<String, HashSet<String>> b...原创 2020-04-04 15:20:45 · 187 阅读 · 0 评论 -
数据结构和算法(32)之背包问题
学习数据结构和算法的日常Demo背包问题动态规划算法介绍思路分析解决类似的问题可以分解成一个个的小问题进行解决,假设存在背包容量大小分为1,2,3,4的各种容量的背包(分配容量的规则为最小重量的整数倍):对于第一行(i=1), 目前只有吉他可以选择,所以对于第二行(i=2),目前存在吉他和音响可以选择,所以对于第三行(i=3),目前存在吉他和音响、电脑可以选择,所以...原创 2020-04-02 18:05:15 · 269 阅读 · 0 评论 -
数据结构和算法(31)之分治思想解决汉诺塔问题
学习数据结构和算法的日常Demo分治算法基本思想汉诺塔问题思路分析public class 汉诺塔 { private static int count = 0; // 记录移动次数 public static void main(String args[]) { hanoTower(3, 'A', 'B', 'C'); } ...原创 2020-04-02 17:55:10 · 218 阅读 · 0 评论 -
数据结构和算法(28)之多路查找树
学习数据结构和算法的日常Demo二叉树的问题分析多叉树之2-3树构建图解B树、B+树、B*树B树介绍B+树介绍B*树介绍扩展:MySQL索引为什么更适合B+树?B+树更适合外部存储,也就是磁盘存储,由于内节点无data域,每个节点能索引的位置更大更精确B+树相邻节点的指针可以大大增加区间访问性,可使用在范围查询等,而B-树每个节点key和data在一起...原创 2020-03-30 19:49:26 · 145 阅读 · 0 评论 -
数据结构和算法(30)之图的深度与广度优先遍历
学习数据结构和算法的日常Demo图的深度优先遍历对下图进行深度优先遍历步骤分析public class Graph { private ArrayList<String> vertexs; // 存储图顶点集合 private int vertexSize; // 顶点个数 private int[][] edges...原创 2020-03-30 19:09:39 · 337 阅读 · 0 评论 -
数据结构和算法(29)之图
学习数据结构和算法的日常Demo图的基本介绍图的常用概念图的表示方法代码实现如下图结构(邻接矩阵法)import java.util.ArrayList;import java.util.LinkedList;public class Graph { private ArrayList<String> vertexs; // 存储图顶点集合...原创 2020-03-30 18:58:39 · 93 阅读 · 0 评论 -
数据结构和算法(27)之AVL树
学习数据结构和算法的日常Demo二叉排序树存在的问题AVL树基本介绍左旋转(右子树高度 - 左子树高度 > 1)代码实现public class AVLNode { int value; AVLNode left; AVLNode right; public AVLNode(int value) { this.value ...原创 2020-03-29 21:47:11 · 111 阅读 · 0 评论 -
数据结构和算法(26)之二叉排序树
学习数据结构和算法的日常Demo二叉排序树基本介绍:二叉排序树的创建和遍历public class TreeNode { int value; TreeNode left; TreeNode right; public TreeNode(int value) { this.value = value; } public...原创 2020-03-28 20:55:26 · 143 阅读 · 0 评论 -
数据结构和算法(25)之使用赫夫曼编码压缩与解压缩文件
学习数据结构和算法的日常Demo文件压缩实例代码实现public class HuffmanCode { public static void main(String[] args) { // 测试压缩文件// String srcFile = "E:\\代码仓库\\Java_DataStructure\\数据结构与算法\\1.txt";/...原创 2020-03-27 20:38:41 · 252 阅读 · 0 评论 -
数据结构和算法(24)之赫夫曼编码
学习数据结构和算法的日常Demo赫夫曼编码基本介绍实例剖析使用ASCII码表对应使用赫夫曼编码对应构建赫夫曼编码具体步骤注意事项赫夫曼编码案例代码实现// Node需要排序public class CodeNode implements Comparable<CodeNode> { Character data; // 存放数据 ...原创 2020-03-27 20:32:38 · 132 阅读 · 0 评论 -
数据结构和算法(23)之构建赫夫曼树
学习数据结构和算法的日常Demo赫夫曼树基本介绍赫夫曼树中的重要概念赫夫曼树构建步骤图解代码实现// Node需要排序public class HuffmanNode implements Comparable<HuffmanNode> { int value; // 权值 HuffmanNode left; ...原创 2020-03-26 19:26:39 · 130 阅读 · 0 评论 -
数据结构和算法(22)之线索二叉树
学习数据结构和算法的日常Demo二叉树遍历存在的问题线索二叉树基本介绍中序线索二叉树思路分析代码实现public class TreeNode { private int value; private TreeNode left; private TreeNode right; // 如果leftType为0,表示指向左子树,如果为1表示指向前驱...原创 2020-03-26 18:27:42 · 128 阅读 · 0 评论 -
数据结构和算法(21)之顺序存储二叉树
学习数据结构和算法的日常Demo何为顺序存储二叉树具体要求存储特点代码实现public class ArrayBinaryTree { private int[] arr; public ArrayBinaryTree(int[] arr) { this.arr = arr; } // 前序遍历 // index:数...原创 2020-03-26 18:16:21 · 185 阅读 · 0 评论 -
数据结构和算法(20)之二叉树查找与删除指定节点
学习数据结构和算法的日常Demo查找二叉树中指定节点查找要求编写前序查找,中序查找和后序查找的方法根据传入的value值,分别使用三种查找方式查找value对应的树节点代码实现public class TreeNode { private int value; private TreeNode left; private TreeNode right;...原创 2020-03-25 22:37:28 · 361 阅读 · 0 评论 -
数据结构和算法(19)之二叉树及其遍历
学习数据结构和算法的日常Demo树的基本介绍从数据存储方式谈起树的常用术语二叉树基本介绍二叉树的遍历前序遍历:先输出父节点,再遍历左子树和右子树中序遍历:先遍历左子树,在输出父节点,在遍历右子树后序遍历:先遍历左子树,再遍历右子树,最后输出父节点小结:看输出父节点的顺序,就确定是前序,中序还是后序遍历步骤代码实现:public class TreeNod...原创 2020-03-25 22:01:12 · 161 阅读 · 0 评论 -
数据结构和算法(18)之哈希表
学习数据结构和算法的日常Demo哈希表基本介绍实际场景问题思路分析代码实现:// 实体类public class Employee { public int id; public String name; public Employee next; public Employee(int id, String name) { ...原创 2020-03-24 20:50:56 · 157 阅读 · 0 评论 -
数据结构和算法(17)斐波拉契查找算法
学习数据结构和算法的日常Demo斐波拉契查找算法基本介绍算法原理代码实现:public class 斐波拉契查找 { final static int maxSize = 20; public static void main(String args[]) { // 数组需要排序 int a[] = {1, 8, 10, 89, ...原创 2020-03-24 20:40:22 · 90 阅读 · 0 评论 -
数据结构和算法(16)查找算法
学习数据结构和算法的日常Demo查找算法介绍在java中,我们常用的查找有四种:顺序(线性查找)二分查找插值查找斐波拉契查找线性查找算法代码实现public class 线性查找 { public static void main(String args[]) { int a[] = {6, 2, 32, 43, 8, 16, 21, 9, 77,...原创 2020-03-24 20:34:53 · 177 阅读 · 0 评论 -
多线程之线程池详解
线程池优势线程池做的工作只要是控制运行的线程数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量,超出数量的线程排队等候,等其他线程执行完毕,再从队列中取出任务来执行。它的主要特点为:线程复用;控制最大并发数;管理线程。第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的销耗。第二:提高响应速度。当任务到达时,任务可以不需要等待线程创建...原创 2020-03-19 13:33:51 · 312 阅读 · 0 评论 -
数据结构和算法(8)之冒泡排序
学习数据结构和算法的日常Demo冒泡排序基本介绍代码实现:public class 冒泡排序 { public static void main(String args[]) { int a[] = {6, 2, 32, 43, 8, 16, 21, 9, 77,-2}; bubbSort(a); System.out.print...原创 2020-03-13 16:15:45 · 140 阅读 · 0 评论 -
数据结构和算法(15)之堆排序
学习数据结构和算法的日常Demo堆排序基本介绍堆排序基本思想堆排序步骤图解简单总结代码实现:public class 堆排序 { public static void main(String args[]) { int a[] = {6, 2, 32, 43, 8, 16, 21, 9, 77}; heapSort(a);...原创 2020-03-13 16:08:34 · 114 阅读 · 0 评论 -
数据结构和算法(14)之基数排序
学习数据结构和算法的日常Demo基数排序基本介绍基数排序基本思想代码实现:public class 基数排序 { public static void main(String args[]) { int a[] = {6, 12, 32, 43, 8, 116, 221, 19, 77, 20}; basicSort(a); ...原创 2020-03-13 15:25:40 · 90 阅读 · 0 评论 -
数据结构和算法(13)之归并排序
学习数据结构和算法的日常Demo归并排序基本介绍代码实现:public class 归并排序 { public static void main(String args[]) { int a[] = {6, 2, 32, 43, 8, 16, 21, 9, 77, -2}; mergeSort(a, 0, a.length - 1); ...原创 2020-03-13 15:12:43 · 109 阅读 · 0 评论 -
数据结构和算法(12)之快速排序
学习数据结构和算法的日常Demo快速排序基本介绍代码实现:public class 快速排序 { public static void main(String args[]) { int a[] = {6, 2, 32, 43, 8, 16, 21, 9, 77, -2}; quick(a); System.out.print...原创 2020-03-13 15:00:19 · 94 阅读 · 0 评论 -
数据结构和算法(11)之希尔排序
学习数据结构和算法的日常Demo希尔排序基本介绍希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也成为缩小增量排序。希尔排序基本思想代码实现:public class 希尔排序 { public static void main(String args[]) { ...原创 2020-03-13 14:55:37 · 195 阅读 · 0 评论 -
数据结构和算法(10)之插入排序
学习数据结构和算法的日常Demo插入排序基本介绍代码实现:public class 插入排序 { public static void main(String args[]) { int a[] = {6, 2, 32, 43, 8, 16, 21, 9, 77, -2}; insertSort(a); System.out...原创 2020-03-13 14:46:40 · 81 阅读 · 0 评论 -
数据结构和算法(9)之选择排序
学习数据结构和算法的日常Demo选择排序基本介绍代码实现:public class 选择排序 { public static void main(String args[]) { int a[] = {6, 2, 32, 43, 8, 16, 21, 9, 77,-2}; choseSort(a); System.out.pr...原创 2020-03-13 14:42:38 · 74 阅读 · 0 评论 -
数据结构和算法(7)之栈
学习数据结构和算法的日常Demo栈的介绍栈的应用场景栈的实现(数组)代码如下:class ArrayStack { private int maxSize; //栈的大小 private int[] arr; //数组,存放数据 private int top = -1; //表示栈游标,初始-1,放一个数据+1 publ...原创 2020-02-17 19:33:51 · 91 阅读 · 0 评论 -
数据结构和算法(5)之双向链表
学习数据结构和算法的日常Demo双向链表代码实现:// 定义Nodeclass DoubleNode { public int id; public String name; // 这都是数据域信息 public DoubleNode next; // 指向下一个节点 public DoubleNode pre; // 指向上一...原创 2020-02-13 21:16:17 · 145 阅读 · 0 评论 -
数据结构和算法(6)之单向环形链表与约瑟夫问题
学习数据结构和算法的日常Demo单向环形链表代码实现:// 创建环形单向列表class CircleSingleLinkedList { // 创建first节点 private NNode first = null; private int nums; public CircleSingleLinkedList(int nums) { ...原创 2020-02-13 21:05:15 · 130 阅读 · 1 评论 -
数据结构和算法(4)之单向链表
学习数据结构和算法的日常Demo链表介绍链表是有序的列表,在内存中的存储如下:构造单链表代码实现:// 定义Nodeclass Node { public int id; public String name; // 这都是数据域信息 public Node next; // 指向下一个节点 public Node(int id, S...原创 2020-02-11 23:16:06 · 136 阅读 · 0 评论 -
数据结构和算法(3)之数组实现环形队列
学习数据结构和算法的日常Demo上一个数组实现队列Demo存在的问题:目前数组使用一次就不能用,没有达到复用的效果 使用算法将其改进为一个环形队列数组模拟环形队列代码实现public class CircleArrayQueueDemo { public static void main(String args[]) { CircleArrayQueue<...原创 2020-01-31 23:19:38 · 260 阅读 · 0 评论 -
数据结构和算法(2)之数组实现队列
学习数据结构和算法的日常Demo队列队列介绍- 队列是一个有序列表,可以用数组或是链表实现- 遵循先进先出的原则数组模拟队列思路队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如下图,其中maxSize是该队列的最大容量 因为队列的输出,输入是分别从前后端来处理,因此需要两个变量front和rear分别记录队列的头尾下标,front会随着数据输出而改变,...原创 2020-01-31 23:10:07 · 98 阅读 · 0 评论 -
数据结构和算法(1)之稀疏数组的转换
学习数据结构和算法的日常Demo稀疏数组基本介绍举例说明可见,稀疏数组的第一行用来记录原始数组的行数,列数,有效值(非0)的总数,从第二行起,开始记录各个有效数字在原始数组中的行标,列标,数值,所以稀疏数组的列数始终为3,行数为有效数字的个数加1转换思路代码实现public class SparesArray { public static void main(...原创 2020-01-31 17:40:02 · 475 阅读 · 0 评论