Java学习
BayMax_39
talk is cheap,show me the code.
展开
-
Java实现自定义HashMap
1.HashMap的实现原理HashMap底层实现采用了哈希表,这是一种非常重要的数据结构。哈希表的基本结构是数组加链表。able:核心存储结构,也称之为“位桶数组”transient Node<K,V>[] table;2.代码实现HashMap存储键值对的过程?1.调用Object.hashCode()2.HashMap.hash()3.根据hash,将Node存...原创 2019-08-26 20:32:49 · 811 阅读 · 0 评论 -
Java 最小生成树算法-普里姆算法和克鲁斯卡尔算法
1.生成树与最小生成树先介绍一下最小生成树(Minimum Cost Spanning Tree),简称MST。给定一个带权的无向连通图,如何选取一棵生成树,使树上所有边上权的总和为最小,这叫最小生成树N个顶点,一定有N-1条边包含全部顶点N-1条边都在图中求最小生成树的算法主要是:普里姆算法和克鲁斯卡尔算法2.普里姆算法和克鲁斯卡尔算法2.1普里姆算法普利姆(Prim)...原创 2019-09-05 18:26:55 · 781 阅读 · 5 评论 -
Java 平衡二叉树之单旋(左旋,右旋)与双旋
1.平衡二叉树平衡二叉树也叫平衡二叉搜索树(Self-balancing binary search tree)又被称为AVL树, 可以保证查询效率较高。具有以下特点:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。首先要明确的是,平衡二叉树是一棵二叉排序树(),它的出现是为了解决普通二叉排序树不平衡的问题。如图,在插入结点之前首先要查找插入位置...原创 2019-09-03 14:45:39 · 2433 阅读 · 3 评论 -
Java 二叉排序树的创建与结点删除
1.二叉排序树二叉排序树:BST: (Binary Sort(Search) Tree), 对于二叉排序树的任何一个非叶子节点,要求左子节点的值比当前节点的值小,右子节点的值比当前节点的值大。所以二叉排序树的中序遍历是升序。eg.数组为 Array(7, 3, 10, 12, 5, 1, 9)2.二叉排序树的创建(结点的添加)思想:比较待插入结点与当前结点的大小关系,若小于当前结点,往左...原创 2019-09-02 22:10:29 · 916 阅读 · 0 评论 -
Java 哈夫曼编码与解码
1.哈夫曼树给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度(wpl)达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。构成哈夫曼树的步骤:从小到大进行排序, 将每一个数据,每个数据都是一个节点 , 每个节点可以看成是一颗最简单的二叉树取出根节点权值最小的两棵二叉树组成一颗新的二叉树, 该新的二叉树的根节点的权值是前面两棵二叉树根节点权...原创 2019-09-02 14:07:08 · 1488 阅读 · 1 评论 -
Java 线索二叉树和自定义线索二叉树的代码实现
1.线索二叉树n个结点的二叉链表中含有n+1(推导:每个节点有两个指针域,除根节点外每个节点消耗一个指针域:2)个空指针域。利用二叉链表中的空指针域,存放指向该结点在某种遍历次序下的前驱和后继结点的指针(这种附加的指针称为"线索")这种加上了线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树(Threaded BinaryTree)。根据线索性质的不同,线索二叉树可分为前序线索二叉树、中序...原创 2019-09-01 17:07:14 · 293 阅读 · 1 评论 -
Java 前序中序后序遍历二叉树&查找二叉树的代码实现
1.二叉树的概念树有很多种,每个节点最多只能有两个子节点的一种形式称为二叉树。二叉树的子节点分为左节点和右节点。如果该二叉树的所有叶子节点都在最后一层,并且结点总数= 2^n -1 , n 为层数,则我们称为满二叉树。如果该二叉树的所有叶子节点都在最后一层或者倒数第二层,而且最后一层的叶子节点在左边连续,倒数第二层的叶子节点在右边连续,我们称为完全二叉树。树的遍历前序遍历: 先输出父...原创 2019-08-31 13:42:23 · 416 阅读 · 0 评论 -
Java 关于栈的一些常见算法题的记录(代码+详细注释)
1.自定义栈(数组实现)//使用数组模拟栈class MyStack{ private int maxSize; private int top; private int[] arr; //栈构造器 public MyStack(int maxSize) { this.maxSize=maxSize; arr=new int[maxSize]; top=-1; ...原创 2019-08-29 00:35:12 · 396 阅读 · 0 评论 -
Java 约瑟夫环问题的两种解法(循环数组,单向环形链表)
1.问题Josephu 问题为:设编号为1,2,… n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m 的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。2.解决方法一:循环数组提示:每次报数,如果满足出圈的条件就将数组元素设置为-1,当下次报数时跳过-1。直至数组最后一个元素变为-1...原创 2019-08-28 23:53:52 · 1018 阅读 · 0 评论 -
Java 图的最短路径问题-迪杰斯特拉算法VS弗洛伊德算法
1.迪杰斯特拉算法VS弗洛伊德算法迪杰斯特拉算法通过选定的被访问顶点,求出从出发访问顶点到其他顶点的最短路径;弗洛伊德算法中每一个顶点都是出发访问点,所以需要将每一个顶点看做被访问顶点,求出从每一个顶点到其他顶点的最短路径。2.迪杰斯特拉算法迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个结点到其他结点的最短路径。 它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思...原创 2019-09-05 19:32:03 · 714 阅读 · 0 评论